作者:Scott Addie
有关标记帮助程序的概述,请参阅 ASP.NET Core 中的标记帮助程序。
Partial 标记帮助程序用于在 Razor 页面和 MVC 应用中呈现分部视图。 请考虑:
用于呈现分部视图的 HTML 帮助程序选项包括:
本文档中的示例均使用产品模型:
namespace TagHelpersBuiltIn.Models { public class Product { public int Number { get; set; } public string Name { get; set; } public string Description { get; set; } } }
以下是分部标记帮助程序属性的清单。
需要 name
属性。 它指示要呈现的分部视图的名称或路径。 提供分部视图名称时,会启动视图发现进程。 提供显式路径时,将绕过该进程。 有关所有可接受的 name
值,请参阅分部视图发现。
以下标记使用显式路径,指示要从共享文件夹加载 _ProductPartial.cshtml。 使用 for 属性,将模型传递给分部视图进行绑定。
<partial name="Shared/_ProductPartial.cshtml" for="Product">
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
属性不能与 for 属性一起使用。
在以下标记中,实例化新的 Product
对象并将其传递给 model
属性进行绑定:
<partial name="_ProductPartial" model='new Product { Number = 1, Name = "Test product", Description = "This is a test" }'>
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 帮助程序示例。 循环访问和显示产品集合。 依据 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" /> }