标签:
Razor并不是新的开发语言,它只是一种用在View页面代码区块的编写风格,所用的代码一样都是c#,因此开发人员不需要额外学习新的语言。
Razor基本语法
1、在view页面输出表达式或者单个变量,只要在c#语句前面加上 @ 符号,同时在c#语句前后加上括号。razor表达式或者单个变量是不需要分号结尾的。范例如下:
表达式:@(ViewBag.Name+ViewBag.Level)
单个变量:@(DateTime.Now) 或者@DateTime.Now (单个变量可以不加括号,建议加上)
2、在view页面执行多行代码,需要在c#语句前面加上 @ 符号,同时在c#语句前后加上大括号。执行多行代码其实是c#代码段,所以要符号c#语言规范,意味着每段要以分号结尾。范例如下:
@{
var message="Hello,";
var name=message+"张三!";
}
3、条件判断语句的if和else在razor中算作两个代码区块和循环语句也是算作一个代码区块,范例如下
条件语句
@if(判断条件)
{
...... @*代码区块*@
}
else
{
...... @*代码区块*@
}
循环语句
@foreach(循环)
{
...... @*代码区块*@
}
4、razor代码段中插入文字内容,必须在行的最前面加“@:”符号,而且加上“@:”符号的这行里也可以加上其他razor变量。范例如下:
@{
var name="张三";
@:你好,@name @*这行输出的是html内容不是c#代码,所以不需要分号*@
}
请注意:在razor语法中纯文字会被自动视为c#陈述句进行解析,如下例子:
@{
我是张三 @*这样写是错误的,”我是张三“纯文字被视为c#陈述句进行解析*@
}
5、razor语法注释代码使用 "@*"和" *@"来当注释的头尾。
Razor和Html 混合输出
如果razor代码段中需要输出大量文字,在每一行前面加上"@:"显然不是明智的做法。这时候只需要在文字区块的前后加上一组html标签即可,razor会智能的判断出这不是一段c#语法,而是一段html标签文字。如下范例:
@if(ViewBag.IsEnabled)
{
<span>启用</span>
}
else
{
<span>禁用</span>
}
这样所有文字内容都会在html标签里面(例子中是span标签),如果不想输出任何html标签可以使用特殊的 <text></text>标签来代替这个html标签。
View页面Razor和Html混合输出注意点
1、属性名称误判
有时候必须让html内容和razor变量紧紧连在一起,比如: 您好,@ViewBag.Name先生。如果这样写,最终输出:" 您好," 。因为这里razor将"@ViewBag.Name先生"当作变量解析。解决方式如下:
2、输出Email地址和@字符
如果单独输出“@”字符,需要用 “@”字符作为转义字符,例子 @:@@张三 输出结果:@张三。
如果需要输出Email地址,只要正常输出Email地址就可以了。因为在razor智能解析中,只要“@”前面和后面都有文字(特殊符号不算),默认“@”就会停用razor解析,所以输出Email超链接例子如下:
<a href="mailto:zhangsan@example.com">zhangsan@example.com</a>
3、输出未经HtmlEncode的字串
使用razor输出变量,默认特殊符号都会被Html编码(HtmlEncode),这是为了保护网站不会遭受跨网站脚本攻击(xss)。如果解码,需要使用@Html.Raw()辅助方法。范例如下:
@Html.Raw(ViewBag.Description)
参考:《asp.net mvc4 开发指南》
标签:
原文地址:http://www.cnblogs.com/KLXL/p/4862668.html