作者:Scott Addie
有关标记帮助程序概述,请参阅 ASP.NET Core 中的标记帮助程序。
Overview
分部标记帮助程序用于在 Pages 和 MVC 应用中呈现Razor。 请考虑:
- 需要 ASP.NET Core 2.1 或更高版本。
- 是 HTML 帮助程序语法的替代方法。
- 以异步方式呈现分部视图。
用于呈现部分视图的 HTML 帮助程序选项包括:
本文档中的示例使用了 Product 模型:
namespace TagHelpersBuiltIn.Models
{
public class Product
{
public int Number { get; set; }
public string Name { get; set; }
public string Description { get; set; }
}
}
以下是分部标记帮助程序属性的清单。
name
name 属性是必需的。 它指示要呈现的部分视图的名称或路径。 提供分部视图名称时,会启动视图发现进程。 提供显式路径时,将绕过此过程。 有关所有可接受的 name 值,请参阅 部分视图发现。
以下标记使用显式路径,指示要从 _ProductPartial.cshtml 文件夹中加载 。 使用 作为 属性,将模型传递给部分视图以进行绑定。
<partial name="Shared/_ProductPartial.cshtml" for="Product">
for
for 属性会分配 ModelExpression,以根据当前模型进行评估。
ModelExpression 推导出 @Model. 的语法。 例如,可以使用 for="Product" 而不是 for="@Model.Product"。 通过使用 @ 符号定义内联表达式来替代此默认推理行为。
以下标记加载 _ProductPartial.cshtml:
<partial name="_ProductPartial" for="Product">
分部视图绑定到关联页模型的 Product 属性:
using Microsoft.AspNetCore.Mvc.RazorPages;
using TagHelpersBuiltIn.Models;
namespace TagHelpersBuiltIn.Pages
{
public class ProductModel : PageModel
{
public Product Product { get; set; }
public void OnGet()
{
Product = new Product
{
Number = 1,
Name = "Test product",
Description = "This is a test product"
};
}
}
}
模型
model 属性分配模型实例,以传递到分部视图。
model 属性不能与 属性的 一起使用。
在以下标记中,一个新的 Product 对象被实例化,并传递给 model 属性以进行绑定:
<partial name="_ProductPartial"
model='new Product { Number = 1, Name = "Test product", Description = "This is a test" }'>
view-data
view-data 属性会分配 ViewDataDictionary,以传递到分部视图。 以下标记使整个 ViewData 集合可供部分视图访问:
@{
ViewData["IsNumberReadOnly"] = true;
}
<partial name="_ProductViewDataPartial" for="Product" view-data="ViewData">
在前面的代码中,IsNumberReadOnly 键值设置为 true 并添加到 ViewData 集合。 因此,在以下分部视图中可访问 ViewData["IsNumberReadOnly"]:
@model TagHelpersBuiltIn.Models.Product
<div class="form-group">
<label asp-for="Number"></label>
@if ((bool)ViewData["IsNumberReadOnly"])
{
<input asp-for="Number" type="number" class="form-control" readonly />
}
else
{
<input asp-for="Number" type="number" class="form-control" />
}
</div>
<div class="form-group">
<label asp-for="Name"></label>
<input asp-for="Name" type="text" class="form-control" />
</div>
<div class="form-group">
<label asp-for="Description"></label>
<textarea asp-for="Description" rows="4" cols="50" class="form-control"></textarea>
</div>
在此示例中,ViewData["IsNumberReadOnly"] 的值确定 Number 字段是否显示为只读。
从 HTML 帮助程序迁移
请考虑以下异步 HTML 帮助程序示例。 循环访问和显示产品集合。 根据 PartialAsync 方法的第一个参数,加载 _ProductPartial.cshtml 部分视图。
Product 模型的实例传递给分部视图进行绑定。
@foreach (var product in Model.Products)
{
@await Html.PartialAsync("_ProductPartial", product)
}
以下部分标记帮助程序实现与 PartialAsync HTML 帮助程序相同的异步呈现行为。 为 model 属性分配一个 Product 模型实例,用于绑定到部分视图。
@foreach (var product in Model.Products)
{
<partial name="_ProductPartial" model="@product" />
}