ASP.NET框架应用程序实战:软件开发工程师岗前必备
上QQ阅读APP看书,第一时间看更新

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
            }
        }