2.4 MVCRazor视图引擎
2.4.1 HelloRazor
ASP.NET WebPagesRazor是专门为B/S应用程序而设计的编程框架,它是一种新的视图引擎,属于MicrosoftWebMatrix(这是一个免费的开发环境,它集成了编程框架、Web服务器、数据库和管理工具,开发人员可以使用它快速地创建一个独立的集成环境)的一部分,它是包含一个数据库和一个能测试的服务器(IIS)的免费的开发环境,它和其他工具一起可以帮助用户创建和管理系统。可以在VisualStudio中像创建ASP.NET应用程序一样创建Razor应用程序,并且能得到一样的应用特性,如智能提示和调试。
ASP.NET Razor是一种允许把代码和内容进行平滑集成的语法,尽管它引入了一些新的符号和关键字,但是Razor并不是一种新的语法。相反,Razor允许用户使用已知的语言来编写代码,比如C#或者VB.NET。
Razor的学习门槛很低,因为它允许使用已经具备的技能,而不要求学习一种新的语言。因此,如果知道如何编写HTML或者使用C#、VB.NET编写代码,就可以轻易编写下面类似的代码。Razor的学习门槛很低,因为它允许使用已经具备的技能,而不要求学习一种新的语言。因此,如果知道如何编写HTML或者使用C#、VB.NET编写代码,就可以轻易编写下面类似的代码:
<div>本页面的加载时间:@DateTime.Now</div>
这些代码会输出:
<div>本页面的加载时间:2016/4/2 21:14:40 </div>
这个例子以HTML标签(<div>)开头,是一些“硬编码”文本,然后就是动态内容,引用了.NET的时间类型(System.DateTime.Now),最后是HTML结束符(</div>)。
Razor智能感知解析器允许用户编写更复杂的逻辑代码,而且可以在代码和标签之间轻易转换。虽然Razor语法与其他的标记语法不同(比如ASP.NET WebForm),但是它们的目标都是相同的,都是渲染HTML。
2.4.2 Razor语法
1.基本语法
所有以@开头或“@{/* 代码体 */}”(在@与{之间不得添加任何空格)中的部分代码都会被MVC引擎所处理。在“@{/*代码体*/}”中的代码的每一行都必须以“; ”结束。如:
@{ var i =10; var y =20; }
而输出变量值(格式:@变量)则不需要以“; ”作为结束符。如:
@i //输出10 @y //输出20;
代码中的字母区分大小写,字符类型常量必须用""括起。如:
@{ string str ="my string"; }
如果需要在页面中输出@字符,可以使用HTML和ASCII代码进行编码。
Razor也提供智能分析功能。如果在@的前一个字符若是非空白字符,则MVC引擎不会对其进行处理。如:
<p>text@i xx</p>输出text@i xx
① 单行代码的语法格式
只有一行语句的表达式,以@开头,不需要{}。举例如下:
@Html.ActionLink("主页", "Index", "Home")
② 多行代码的语法格式
举例如下:
@{ var i =10; var y =20; }
2.局部变量
Razor不支持访问修饰符(如public、private等),可以在单行代码中定义局部变量,如:
@{ var total =7; } @{ var myMessage ="Hello World"; }
也可以通过多行代码来定义局部变量:
@{ var greeting ="Welcome to our site! "; var weekDay =DateTime.Now.DayOfWeek; var greetingMessage =greeting +" Today is: " +weekDay; }
在上下文中使用变量的代码如下:
<p>The value of your account is: @total </p> <p>The value of myMessage is: @myMessage</p>
注意:变量可以拼接输出,如:
@{ var i =10; } <p>text @i text</p>
将输出
text 10 text
如果输出的是变量的方法名,则不需要用@{}括住,如:
<p>text @i.ToString()text</p>
使用变量对象时可直接写为:
@var1 @var2 @myObject.xx
在逻辑表达式中使用变量的代码如下:
@{ if (逻辑表达) { //do something } else { //do anything } }
另外,在@{...}内部可以使用HTML标记,如:
@{ <p>text</P> <div>div1</div> }
在@{...}内部可以输出文本,利用“@:”进行单行输出,如:
@{ @:This is some text @:This is text too @:@i也可输出变量 }
在@{...}内部可以利用<text/>进行多行输出,如:
@{ <text> tomorrow is good some girl is nice </text> }
3.注释
在@{...}内部使用注释的代码如下:
@{ /* 多行注释 */ }
若在@{...}内部使用“<! ---->”注释,则会输出到页面之中。如果在“<! --->”内部使用“@变量”,则会被处理。例如,有如下代码:
@{ <! --time now: @DateTime.Now.ToString() --> }
输出结果为:
<! --time now: 4/9/2011 12:01-->
4.循环
在Razor中使用循环需要加关键字符“@”,共有两种方式可以实现循环的效果。
方式1:
@for (int i =10; i <11; i++) { @:@i }
方式2:
@{ for (int i =10; i <11; i++) { //do something } }