razor 语法

ads

Razor 语法混合了C#代码,HTML标记。一般情况下Razor 文件以cshtml作为扩展名,或者在Blazor的Razor 组件中以razor作为扩展名。

 

语法

 

Razor以字符@HTML转换到C#,  Razor会运行C#表达式,并输出HTML内容。同时需要注意当在Razor中以@+Razor保留关键字,它会转到Razor特定的标记,否则是转到换到普通的C#代码。

为了在Razor标记中对字符@逃逸,我们需要使用两个@, 例如:

<p>@@Username</p>

Razor输出如下结果:
<p>@Username</p>

 

HTML 标记的属性和标记内容中使用电子邮件地址,不会对字符@进行转义:
<ahref="mailto:Support@contoso.com">Support@contoso.com</a>

 

Razor隐式表达式

隐式表达式是以@字符后面跟C#代码
 

<p>@DateTime.Now</p>

<p>@DateTime.IsLeapYear(2016)</p>

 

需要注意的是Razor隐式表达式中不能使用泛型。如果在隐式表达式中使用泛型的话,Razor编译会出错。

 

Razor显式表达式

显式表达式的语法是:@(表达式), :
<p>Last week this time: @(DateTime.Now - TimeSpan.FromDays(7))</p>

在显式表达式中的C#表达式会运行之后,并输出为HTML输出。

同时在显式表达式中可以使用泛型:
<p>@(GenericMethod<int>())</p>

 

表达式编码

C#表达式运行结果被Razor输出为HTML编码,例如C#表达式:
@("<span>HelloWorld</span>")

输出为:
&lt;span&gt;Hello World&lt;/span&gt;

进行编码后的输出避免造成页面的安全性问题,例如用户直接在代码中输出javascript代码。

另外需要注意,如果用户直接调用Html.Raw()方法输出的话,输出结果不会被编码。

Razor代码块

 

Razor代码块是以@+ {} 表示代码块,代码块不像表达式,代码块并不输出内容,这是和表达式最为重要的区别。例如:
 


上述代码块定义变量名,使用表达式输出内容。

 

另外可以在代码块使用本地方法和HTML标记结合可以定义模板方法,如下图:
 

 

输出为:
 

 

 

隐式转换

 

默认的代码块语言是C#,但是Razor 页面会转换回HTML 标记,例如:
 

 

显式分隔符转换

 

在代码块中为了显式的对小段的代码转换为HTML 标记,使用<text>将需要转换的内容引用起来,即可以完成显式转换。

 

需要注意的是使用<text>进行转换,只有在<text>标记中的内容会转换输出。<text>前端和后端不能留有空白。

 

显式行转换

 

为了在代码块中输出一行中所有的内容,需要使用@: 进行显式行转换:
 

 

在代码块中如果有多余@字符会引发Razor编译错误,而且这类的错误非常难以跟踪和排查,所以尽量注意在代码块中对于字符@的使用。

 

流程控制

 

Razor的流程控制实际上是代码块的扩展。上述所有在代码块中的概念都可以在流程控制结构中使用,目前Razor支持如下的流程控制:@if, else if, else, @switch, 使用实例如下:
 

 

 

 

 

循环控制

 

Razor Page目前支持如下的循环控制:@for, @foreach, @while, @do while.

 

 

 

 

 

@using 语句

 

在C#中使用using 语句确保某个对象在使用完后被正确的释放(disposed), 在Razor中也可以直接使用using语句,如下图使用Html helper 生成一个form.

 

 

 

@try, catch, finally

 

异常捕获在Razor中也是类似于直接在C#代码中的语法

 

 

@Lock

 

Razor可以使用lock 保护重要的代码块:
 

 

 

注释

 

Razor支持C#HTML的注释。

例如//, /*, */, 以及<!-- -->

 

同时需要注意的是在Razor 组件中,也可以使用如下的注释

@* … @

 

 

 

指令

 

Razor 指令以@ + Razor 保留关键字,明确的指明需要使用什么指令,并且这些指令会改变和使用Razor的不同的功能。

关于如何理解指令,先理解,所有的Razor页面最终会被编译成我们熟悉的C#类。

 

@attribute

@attribute指令给Razor页面指定需要使用的属性,从而定义生成的C#类的一些特性,例如

 

@code

@code是Razor 组件专用,用于在@code代码块中定义页面类需要的字段,属性,方法等定义。@code是@functions的别名。但是建议在Razor组件中使用@code,而非@functions.

 

@implements 指令,类比如C#类的implements.

 

@inherits:  类比C#的中继承。

 

@inject: DI容器中引入需要的类。

 

@layout: 指定页面需要继承的布局模板。

 

@model: 专用于MVC 视图和Razor Page页面,用于指定model

 

@namespace: 用户指定生成的页面类所处的名称空间。

 

@page指令:用户razor page项目或者razor 组件,用于定义路由。

 

@preservewhitespace: 是否保留空白,默认是false.

 

@section: 用户razor page或者是mvc

 

@using:

 

如下指令专用于Razor 组件:

@attributes,@bind, @on{EVENT}, @on{Event}:preventDefault, @on{event}:stopPropagation, @key,@ref, @typeparam

 

 

Razor保留关键字:
 

 

 

C# Razor 保留关键字:

 

要逃逸保留关键字必须使用如下的语法:
Razor keywords are escaped with @(Razor Keyword) (forexample, @(functions)).

和:

C# Razor keywords must be double-escaped with @(@C# Razor Keyword)(for example, @(@case)). The first @ escapes the Razor parser. The second @escapes the C# parser.


最后编辑于:2024/1/10 拔丝英语网

admin-avatar

英语作文代写、国外视频下载

高质量学习资料分享

admin@buzzrecipe.com