ASP.NET MVC3 Razor视图引擎基本语法学习小结

在学习Razor视图引擎基本语法过程中,我习惯拿ASPX视图引擎基本语法来比较,这样能更快的掌握Razor。先来看一个简单的ASPX例子:

<%
    int i = 100;
    string str = "mzwu.com";
%>
i=<% =i %>, str=<% =str %>

转换为Razor:

@{
    int i = 100;
    string str = "mzwu.com";
}
i=@i,str=@str

可见,Razor用@代替了<%和%>,在输出单个变量值时,显得更简单。

再来看一个ASPX的例子:

<%for (int counter = 0; counter < 10; counter++){%>
    <span>number = <% =counter %>;</span>
<%}%>

转换为Razor:

@for (int counter = 0; counter < 10; counter++)
{
    <span>number = @counter;</span>
}

从例子中可以看出,Razor比ASPX输的代码量少了,并且更智能,能自动分辨出C#代码和html。

独特的<text>标签

在第二个例子中,<span>标签没多大用处,我们它去掉吧:

@for (int counter = 0; counter < 10; counter++)
{
    number = @counter;
}



为什么会出错?原因是去掉<span>后,智能的Razor将这行理解成是一个C#语句,所以提示上下文中没有声明number变量。怎么解决呢?<text>出场了:

@for (int counter = 0; counter < 10; counter++)
{
    <text>number = @counter;</text>
}

这感觉<text>和<span>作用一样,有什么区别吗?<text>是Razor新增的一个独特的标签,它用来标识一个文本区块,并且它不会在客户端显示出来,它还有一种简写方法:

@for (int counter = 0; counter < 10; counter++)
{
    @:number = @counter;
}

@转义

@在Razor视图引擎中如此重要,如果要在WEB页面中输出一个Email地址怎么办呢?不用太担心,大部分情况下Razor会智能的区分:

引用内容 引用内容
× wemaster@mzwu.com
× 123@456
√ number=@counter
√ number @counter

只要@前边不是空格和其他符号,Razor都会将它直接显示出来。

这终究让人不太放心,总有不小心加了空格的时候,程序就得出错了,显然微软考虑到了这个问题,可连续输入两个@进行转义保证可万无一失:

引用内容 引用内容
wemaster @@mzwu.com

还有问题,再看一个例子,生成10个用户名:

@for (int counter = 0; counter < 10; counter++)
{
    <text>user@counter;</text>
}

按上边说的,这边@不会解析,但我们是希望Razor去解析它,怎么办呢?这时用中括号来解决就可以了:

@for (int counter = 0; counter < 10; counter++)
{
    <text>user@(counter);</text>
}


评论: 0 | 引用: 0 | 查看次数: 7480
发表评论
登录后再发表评论!