一、ASP.NET Core 的 Razor 语法、Razor视图引擎
Razor 是一种标记语法,用于将基于 .NET 的代码嵌入网页中。 Razor 语法由 Razor 标记、C# 和 HTML 组成。 包含 Razor 的文件通常具有 .cshtml 文件扩展名。
也可在 Razor 文件 () 中找到 .razor。
Razor 语法类似于各种 JavaScript 单页应用程序 (SPA) 框架(如 Angular、React、VueJs 和 Svelte)的模板化引擎。
呈现 HTML
默认的 Razor 语言为 HTML。 从 Razor 标记呈现 HTML 与从 HTML 文件呈现 HTML 没有什么不同。 服务器会按原样呈现 .cshtml
二、Razor 语法
Razor 支持 C#,并使用 @ 符号从 HTML 转换为 C#。 Razor 计算 C# 表达式,并将它们呈现在 HTML 输出中。
当 @ 符号后跟 Razor 保留关键字时,它会转换为 Razor 特定标记。 否则会转换为纯 HTML。
若要对 @ 标记中的 Razor 符号进行转义,请使用另一个 @ 符号:
<p>@@Username</p>
隐式 Razor 表达式
隐式 Razor 表达式以 @
开头,后跟 C# 代码:
<p>@DateTime.Now</p>
<p>@DateTime.IsLeapYear(2016)</p>
显式 Razor 表达式
@( )
@{ }
显式 Razor 表达式由 @
符号和平衡圆括号组成。
<p>Last week this time: @(DateTime.Now - TimeSpan.FromDays(7))</p>
@{var joe = new Person("Joe", 33); }<p>Age@(joe.Age)</p>
@for (var i = 0; i < people.Length; i++) {var person = people[i];<text>Name: @person.Name</text> }
@if (value % 2 == 0) {<p>The value was even.</p> } else if (value >= 1337) {<p>The value is large.</p> } else {<p>The value is odd and small.</p> }
表达式编码
计算结果为字符串的 C# 表达式采用 HTML 编码。 计算结果为 IHtmlContent
的 C# 表达式直接通过 IHtmlContent.WriteTo
呈现。 计算结果不为 IHtmlContent
的 C# 表达式通过 ToString
转换为字符串,并在呈现前进行编码。
@("<span>Hello World</span>")
上述代码呈现以下 HTML:
<span>Hello World</span>
HtmlHelper.Raw
输出不进行编码,但呈现为 HTML 标记。
三、使用部分视图
在其他视图或布局中使用 Html.Partial
或 Html.RenderPartial
方法引入部分视图:
<!-- 在视图中引入部分视图 --> @Html.Partial("_MyPartialView")<!-- 或者使用 Razor 语法 --> @{await Html.RenderPartialAsync("_MyPartialView"); }
四、Razor中的HTML辅助方法
Html.ActionLink
ActionLink 用于生成超链接,链接到指定的Controller和Action。
@Html.ActionLink("Click me", "About", "Home")
Html.DisplayNameFor 和 Html.DisplayFor
这对方法用于显示模型的属性名和属性值。
@Html.DisplayNameFor(model => model.Name)
@Html.DisplayFor(model => model.Name)
Html.EditorFor 和 Html.TextBoxFor
用于生成文本框,EditorFor 会根据模型类型选择适当的编辑器。
@Html.EditorFor(model => model.UserName)
@Html.TextBoxFor(model => model.UserName)
等等
更多:
ASP.NET Core MVC的Areas使用整理
ASP.NET Core MVC的Razor视图渲染中文乱码的问题
Asp.Net Core 如何获取IWebHostEnvironment