Razor

177 阅读3分钟

Razor 语法说明

Razor 是一种标记语法,用于将基于 .NET 的代码嵌入网页中。由 Razor、C# 和 HTML 组成。页面是.cshtml 文件扩展名,组件是.razor文件扩展名。

语法

默认的 Razor 语言为 HTML,服务器会按原样显示.cshtml Razor 文件中的 HTML 标签。HTML 属性和内容不将 @ 符号视为转换字符

Razor 代码

隐式:以 @ 开头,后跟 C# 代码

<p>@DateTime.Now</p>

显式:由 @ 符号和()组成。

<p>Last week this time: @(DateTime.Now - TimeSpan.FromDays(7))</p>

代码块:@{}

默认语言是 C#,Razor 页面可以隐式转换HTML,所以代码块既可以写C#也可以写html

@{ 
    void RenderName(string name) 
        { 
            <p>Name: <strong>@name</strong></p> 
        } 
    RenderName("Mahatma Gandhi"); 
    RenderName("Martin Luther King, Jr."); 
 }

关键字

Razor 关键字

使用 @(Razor Keyword) 进行转义(例如,@(functions))。

  • page (用于标识一个页面路由。它告诉Razor引擎当前页面是一个可路由的页面,可以接收来自客户端的请求并生成响应。)
@page { routes } //routes是一个可选参数,用于指定页面的路由规则。
@page { "/index" }
@page 指令还可以用于定义页面的布局和模型。指定页面的布局文件和使用的模型类型。
@page "/index" {  
    @layout "Shared/_Layout"  
    @model Person  
}
  • namespace(@namespace指令用于声明命名空间。它告诉Razor引擎当前文件所使用的命名空间,以便在代码中使用该命名空间中的类型和成员。)
@namespace MyNamespace
@model MyNamespace.Person  
<div>Name: @Model.Name</div>
  • code(仅适用于razor组件,将 C# 成员(字段、属性和方法)添加到组件)
  • functions(允许将 C# 成员(字段、属性和方法)添加到生成的类中)
  • implements (指定一个类实现了一个或多个接口,使得该类必须实现这些接口中定义的方法和属性。)
@implements IDisposable 
    <h1>Example</h1>
@functions { 
    private bool _isDisposed; 
    ... 
    public void Dispose() => _isDisposed = true; 
    }
  • inherits(继承一个现有的类或命名空间。使当前类可以继承并使用父类或命名空间中定义的方法、属性和其他成员。)
@inherits BaseClass  
public class DerivedClass  
{  
    // 可以继承和使用 BaseClass 中定义的方法和属性  
    // 可以在此添加特定于 DerivedClass 的方法和属性  
}
/*
通过使用`@inherits`指令,`DerivedClass`可以继承并使用`BaseClass`中定义的所有方法和属性。
这样,在Razor页面或组件中使用`DerivedClass`时,就可以调用这些方法和属性,
或者添加特定于`DerivedClass`的方法和属性。
*/
  • model(用于指定当前页面的模型类型。它告诉Razor引擎在页面中使用的模型类型,以便正确地绑定数据和执行验证等操作。)
  • section (用于定义一个可重用的区块,可以在多个页面中重复使用。通过使用@section指令,可以将页面的某些部分(如头部、底部、侧边栏等)提取出来,将其定义为一个独立的区块,以便在不同的页面中进行重用。)
@section SectionName: SectionContent 
@section Footer:  
<footer>  
    <p>&copy; 2023 My Website. All rights reserved.</p>  
</footer>

@section Footer:  
<!-- 引入定义的 Footer 区块 -->  
@section.Footer()
  • inject(@inject指令用于注入依赖项。告诉Razor引擎将所需的依赖项注入到当前页面中,以便在代码中使用它们。)
@inject dependencyName dependencyObject

@inject IDataService dataService
@{   
    var data = dataService.GetData();  
    Model = data;  
}
  • layout(为具有@page指令的可路由 Razor 组件指定布局。布局组件用于避免代码重复和不一致)
@layout _Layout
layoutName 是要使用的布局文件的名称。
  • preservewhitespace()
  • @rendermode()
`InteractiveServer`:使用 Blazor Server 应用交互式服务器呈现。
`InteractiveWebAssembly`:使用 Blazor WebAssembly 应用交互式 WebAssembly 呈现。
`InteractiveAuto`:最初使用 Blazor Server 应用交互式 WebAssembly 呈现,下载 Blazor 捆绑包后,在后续访问中使用 WebAssembly 应用交互式 WebAssembly 呈现。