MVC4 razor与aspx的区别以及用法
Model要重,Controller要轻,View要够笨,mvc不希望在开发view时还需要判断过多的与view无关的技术,所以要尽可能的保持view逻辑简单。(以下中有出现代码的地方用了什么尖括号百分号标签这些字样是为了防止保存时被新浪博客给处理掉)
如果view选择aspx后缀的话
页面上都会出现很多夹杂后台代码与html的情况,而先前使用的“<尖括号%百分号%尖括号>”这种古老表示法会让html标签与.net代码区块混杂在一起,这样当页面变的复杂时,混合类代码的可读性就大大降低。
在mvc3之后view就引入了Razor语法,用俗称的小老鼠“@”符号来代表代码片段,搭配vs的语法高亮显示,razor语法也让整个view页面内的html标签与服务器代码结合的相当漂亮。
在mvc2.5当中如果要在页面上显示当前时间:
<尖括号%: DateTime.Now%百分号>
若使用razor语法,则是
@DateTime.Now
Razor并不是一个代码语言,只是一种用在view页面的代码区块撰写风格。
如果是c#来编写razor页面,后缀是cshtml
如果是vb.net来编写,后缀则是vbhtml
1,Razor基本语法
在页面上输出单一变量时,只要在c#语句前加上@符号
eg :
<标签>
现在时间:@DateTime.Now
</标签>
注意:在输出单一变量时不需要加上分号结尾,但是如果再页面中输出一段空白子元或者运算子的结果时,则需要在前后加上一个小括号
eg:
<标签>
会员名称:@(user.Identity.Name+Model.MemberLevel)
状态:@(ViewBag.IsEnabled?"启用":“停用”)
</标签>
在页面上执行多行代码时,必须在前后加上一个大括号
eg
@
{
var a=1;
var b="aaa";
}
注意:@{}之间属于一个c#代码区段,在撰写代码时必须符合c#语言规范,也就是必须分号结尾。
如果要在多行后台代码的razor语法中插入html或者其他内容,必须在每一行最前面加上一个"@:"符号,在这个符号的这行代码里,也可以再加上其他razor变量
eg:
@
{
var name="aa";
@:您好, 我是@name
}
razar检视页面中表示注释,用“@*”与“*@”来当注释头尾,就不写范例了。
如果要在razor页面输出“@”符号,可以用@符号作为跳脱子元,比如@@aaa,输出@aaa
2,razor与html混合输出
if语句范例
@if(ViewBag.IsEnabled){
@:启用
}else{
@:停用
}
如果再if与else代码区块里放置大量的html标签,每行前面都要加"@:"有点麻烦,只要在代码区块的前后加上一组html标签就可以,(纯文字在razor的代码里会自动被视为c#语句,所以必须加标签)
@if(ViewBag.IsEnabled){
<标签>启用</标签>
}else{
<标签>停用</标签>
}
vs工具中的高亮提示,razor中c#代码是显示淡蓝色,如果是白底色的话就代表是razor意外的纯文字,razor会很智能的自动辨别是c#还是html,但是如果我们不想在这个区段出现任何的标签怎么办呢,在razor中使用特殊的<标签text>来代替这个html标签,最后输出到浏览器时就不会出现text标签,当然也可以在多行c#代码区段使用"@:" 或者text作为HTML与razor语法之间的切换