ASP.NET Core 的 Razor 语法

呈现 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;
    }
}

 
原文地址:https://www.cnblogs.com/student-note/p/8916555.html