Razor视图引擎
使用C#语法的Razor视图文件扩展名为.cshtml;使用Visual Basic语法的Razor视图文件扩展名为.vbhtml。文件扩展名指出了Razor语法分析器的编码语言的语法。
Razor语法示例
1、隐式代码表达式:代码表达式(model.Message)将被计算并将值写入到响应中
<span>@model.Message</span>
注意:隐式代码表达式总是采用HTML编码方式
2、显示代码表达式:下面的model会被替换,而.Message会被当做一个静态字符串输出
<span>@(model).Message</span>
3、无编码代码表达式:
Razor表达式会将<>'等符号自动编码
@{string message="<script>alert('123');</script>"}
<span>@message</span>
输出结果:<span><script>alert('123')</script></span> --在响应报文中看
新式浏览器渲染:<script>alert('123');</script>
使用Html.Raw声明不进行字符编码
例如:@Html.Raw("<div style='color:red'>输出字符串</div>")
结果:输出红色的文字 输出字符串
注意:存在安全隐患
4、代码块:与代码表达式先求出表达式值,再输出到响应不同,代码块是简单的执行代码
@{int x=123;string str="temp";int y=x+100;}
注意:当调用没有返回值(返回类型为void)的方法时使用花括号{}
例如:@{Html.RenderPartial{"PV"};}
文本:可以理解为字符串
标记:可以理解为html标签
代码:可以理解为C#语法
5、文本和标记相结合
@foreach(var item in items){<span>Item @item.Name.</span>}
6、混合代码和纯文本
使用特殊标签<text>
@if(showMessage){
<text>This is
plain text</text>
}
另一种写法
@if(showMessage){
@:This is plain text.
}
7、转义代码分隔符
My Handle is @@hacked
或者
My Handle is @hacked
8、注释
使用@**@
9、调用泛型方法
使用()将整个表达式包起来
示例:@(Html.Active<T>())
布局(类似母版页)
使用@RenderBody()、@RenderSection()作为占位符
_ViewStart.cshtml页面中的代码先于同目录下所有视图代码执行且可以递归地应用到子目录下的任何视图
部分视图
PartialView