首页 > 代码库 > Razor标记语言介绍

Razor标记语言介绍

什么是Razor?
   Razor的中文意思是“剃刀”,它不是编程语言,只是一种服务器段的标记语言,与PHP和ASP类似
   Razor允许你向网页中嵌入基于服务器的代码(Visual Basic 和 C#)的标记语法。当网页被写入浏览器时,
   基于服务器的代码能够创建动态内容。在网页加载时,服务器在向浏览器返回页面之前,会执行页面内的基于服务器代码。
   Razor支持C#和VB两种语言,其后缀名因使用的语言不同而不同,分别为.cshtml和.vbhtml

Razor语法之注释
   Razor中的注释采用 @* 注释内容 *@ 在VS2013中,经过测试,只支持这种注释
   但是如果是在代码块中,则还支持C#本身的两种注释:// 和 /*  */

Razor语法之 @ 符号
   @ 符号是Razor服务器代码的开始符号,例如下面语句输出了当前时间:
   <p>
    当前时间为:
    @DateTime.Now.ToString("yyyy-mm-dd HH:mm:ss")
    </p>
    单语句时不需要加";",加了分号之后会原样输出

Razor语法之代码块(作用域) @{}
   可以在 @{} 中进行一些服务器段的操作,如下面两个数的相加:
   @{
    int num1 = 10;
    int num2 = 20;
    int sum = num1 + num2;
    @sum
    }
    在代码块中输出变量的值需要使用: @+变量名。
    在代码块中输出文字需要使用: @:+要输出的文字
    在代码块中,每一个语句都需要加";"

Razor语法之与HTML代码混写
   在Razor中写html代码和在html代码中写Razor语句都是可以的。
   a.在作用域内如果是以html标签开始则视为文本输出
   b.如果要输出 @,则使用 @@
   c.如果要输出非html标签和非Razor语句的代码,则用 @:,
   其作用相当于在处于html标签下编写,如在 @:后面可以加上 @就是表示Razor语句的变量
   <p>
    混合Razor,输出sum的值:
    @sum

    @{
        <br/>
        @:混合HTML,输出HTML内容:
        <h3>这是标题3的内容</h3>
    }
    </p>

Razor语法之常用函数
   @Html.Raw(object value),输出HTML,如: @Html.Raw("<font color=‘red‘>红色的字</font>")
   @Model属性。在Action中,若是为View传递了一个实体类,则在对于的View中可以使用 @Model.PropertyName来获取对于的属性值
   前提是传递的实体类不为空。

Section区域
   Section是定义在Layout页面中的,该区域可以在子页面被替换,通过 @RenderSection("SectionName", required: false)
   若required为true,则在子页面中必须重新,否则会报异常
   例如在父页面中定义了如下代码:
    <body>
     @RenderSection("SubMenu")
        @RenderBody()
    </body>
    则在子页面中必须有:
    @section SubMenu{
    Hello This is a section implement in About View.
    }
    @RenderBody()会将子页面的内容进行替换

Helper:定义可重复使用的方法,不仅可以同个页面的不同地方使用,还可以在不同页面使用。
    通常会把一类Helper放在一个单独的cshtml文件中,而文件名就相当于一个类名,系统为我们提供了一些Helper,
    用来简化Html的书写。这些Helper放在 @Html中,我们可以方便的使用:
    自定义Helper(同个页面):
    @helper Sum(int a, int b)
    {
        var result = a + b;
        @result
    }
    <p>@@helper的语法</p>
    <p>2+3=@Sum(2,3)</p>
    <p>5+9=@Sum(5, 9)</p>

    (外部页面):

待补充….

Layout(布局)
    Layout的使用就像WebForm的模板页一样,要使用Layout,必须在模板页相应的位置添加 @RenderBody()方法,
    用来替换子页的内容。如模板页定义:
    <!DOCTYPE html>
    <html lang="zh">
        <head>
        <meta charset="utf-8"/>
        <title>测试网站 - @Page.Title</title>
        </head>
        <body>
        @RenderBody()
        </body>
    </html>
    子页中使用模板页,需添加下面代码:
    @{
    Layout = "/LayoutPage.cshtml";
    Page.Title = "第一个子页面";
    }
    <p>This is a layout test</p>

Page页复用
    在Razor中,可以再一个页面中输出另一个页面的HTML代码,需要使用RenderPage("页面路径");
    如:
    <p>
    @RenderPage("/SubPage.cshtml")
    </p>

    SubPage代码:
    <font color="red">这是一个子页面</font>