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>© 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 呈现。