Razor语法示例

本章通过示例来说明常见用途下的Razor语法。

1.Razor中的核心转换符号是@。这个单一字符用做标记-代码的转换字符,有时也反过来用作代码-标记的转换字符。这里共有两种基本类型的转换:代码表达式和代码块。求出表达式的值,然后将值写入到响应中。

@{

string rootNamespace = "MyApp";

}

@rootNamespace.Models

在这个示例中想要的输出结果是:

MyApp.Models

然而,这样会提示string没有Models属性。这种情况下,Razor是不能理解我们的意图的,Razor支持将表达式用圆括号括起来以支持显示代码表达式:

@(rootNamespace).Models

这样就告知了Razor,.Models是字面量文本,而不是表达式的一部分。

同时Razor支持使用@@来转义@符号,

You should follow @@aspnet

  输出效果为:You should follow @aspnet

2.HTML编码

因为在许多情况下都需要用视图显示用户输入,如博客评论或产品评论等,所以总是存在潜在的跨站脚本注入攻击(也称XSS,将在接下来的章节详细介绍).值得一喜的是Razor表达式是用HTML自动编码的。

如果想展示HTML标记,就返回一个System.Web.IHtmlString对象的实例,Razor并不对它进行编码。同时也可以创建一个HTMLString的实例或者使用Html.Raw便捷方法:

@{

string message = " 这是一个测试!";

}

@Html.Raw(message)

效果:这是一个测试

3.代码块

Razor在视图中除了支持代码表达式以外,还支持代码块。

@foreach(var item in stuff){

  • The name is @item.
  •  }

    这段代码迭代了一个数组,并为数组中的每一项显示了一个列表项元素。

    4Razor语法示例

    4.1.隐式代码表达式

    如前所述,代码表达式将被计算并将值写入到响应中,这就是在视图中显示值得一般原理。

    @model.Message

    Razor中的隐式代码表达式总是采用HTML编码方式。

    4.2显式代码表达式

    代码表达式的值将被计算并写入到响应中,这就是在视图中显示值得一般原理。

    1+2=@(1+2)

    4.3无编码代码表达式

    有些情况下,需要显式的渲染一些不应该采用HTML编码的值,这时可以采用html.Raw方法来保证该值不被编码。

    @Html.Raw(model.Message)

    4.4代码块

    不像代码表达式先求得表达式的值,然后再输出到响应,代码块是简单地执行代码部分。这一点对于声明以后要使用到的变量是有帮助的。

    @{

    int x = 123;

    string y = "because.";

    }

    4.5文本和标记相结合

    这个例子显示了在Razor中混用文本和标记的概念,具体如下:

    @foreach(var item in items){

    Item @item.Name.

    }

    4.6混合代码和纯文本

    Razor查找标签的开始位置以确定何时将代码转换为标记。然而,有时可能想在一个代码块之后立即输出纯文本。

    @if(showMessage){

    This is plain text

    }

    @if(showMessage){

    @:This is plain text.

    }

    Razor 可采用两种不同的方式来混合代码和纯文本。第一种是使用标签,这样只是把标签内容写入到响应中,而标签本身则不写入,如果想回转标记,只需要使用一个标签就行了。第二种方式是使用一种特殊的语法,来实现从代码到纯文本的转换,但是每次只能作用于一行文本。

    4.7转义代码分隔符

    可以用@@来编码@以达到显示@的目的。此外始终都可以选择使用HTML编码来实现。

    Razor:The ASp.net Twitter Handle is @;aspnet

    或 The ASp.net Twitter Handle is @@64;aspnet

    4.8服务器端的注释

    Razor为注释一块代码和标记提供了美观的语法。

    @* This is a multiline server side comment.

    @if(showMessage){

    @ViewBag.Message

    All of this is commented out.

    }

    *@

    4.9调用泛型方法

    这与显示代码表达式基本没有什么不同。需要注意一点的是:调用泛型方法的代码包含尖括号。书写时需要用圆括号括起来。

    @(Html.SomeMethod)())

     

    你可能感兴趣的:(C#,C#,Razor)