呈现 HTML
默认 Razor 语言为 HTML。 从 Razor 标记呈现 HTML 与从 HTML 文件呈现 HTML 并没有什么不同。服务器会按原样呈现 .cshtml Razor 文件中的 HTML 标记。
Razor 语法
Razor 支持 C#,并使用 @
符号从 HTML 转换为 C#。 Razor 计算 C# 表达式,并将它们呈现在 HTML 输出中。
当 @
符号后跟 Razor 保留关键字时,它会转换为 Razor 特定标记。 否则会转换为纯 C#。
若要对 Razor 标记中的 @
符号进行转义,请使用另一个 @
符号:
CSHTML
<p>@@Username</p>
该代码在 HTML 中使用单个 @
符号呈现:
HTML
<p>@Username</p>
包含电子邮件地址的 HTML 属性和内容不将 @
符号视为转换字符。 Razor 分析不会处理以下示例中的电子邮件地址:
CSHTML
<a href="mailto:Support@contoso.com">Support@contoso.com</a>
表达式编码
计算结果为字符串的 C# 表达式采用 HTML 编码。 计算结果为 IHtmlContent
的 C# 表达式直接通过 IHtmlContent.WriteTo
呈现。 计算结果不为 IHtmlContent
的 C# 表达式通过 ToString
转换为字符串,并在呈现前进行编码。
CSHTML
@("<span>Hello World</span>")
也可使用HtmlHelper.Raw,但是不安全应该避免使用
隐式转换
代码块中的默认语言为 C#,不过,Razor 页面可以转换回 HTML:
@{ var inCSharp = true; <p>Now in HTML, was in C# @inCSharp</p> }
@inherits
@inherits
指令对视图继承的类提供完全控制:
@inherits TypeNameOfClassToInheritFrom
@functions
@functions
指令允许 Razor 页面将函数级别的内容添加到视图:
CSHTML
@functions { // C# Code }
例如:
CSHTML
@functions {
public string GetHello()
{
return "Hello";
}
}
<div>From method: @GetHello()</div>
查看为视图生成的 Razor C# 类
将下面的类添加到 ASP.NET Core MVC 项目:
using Microsoft.AspNetCore.Mvc.Razor.Extensions; using Microsoft.AspNetCore.Razor.Language; public class CustomTemplateEngine : MvcRazorTemplateEngine { public CustomTemplateEngine(RazorEngine engine, RazorProject project) : base(engine, project) { } public override RazorCSharpDocument GenerateCode(RazorCodeDocument codeDocument) { var csharpDocument = base.GenerateCode(codeDocument); var generatedCode = csharpDocument.GeneratedCode; // Look at generatedCode return csharpDocument; } }