隐藏

ASP.NET Core 中的部分标记帮助程序

发布:2021/7/6 16:54:54作者:管理员 来源:本站 浏览次数:798

概述


分部标记帮助程序用于在 Pages 和MVC 应用中呈现 Razor 分部视图。 请考虑:


   需要 ASP.NET Core 2.1 或更高版本。

   是 HTML 帮助程序语法的替代方法。

   以异步方式呈现分部视图。


用于呈现分部视图的 HTML 帮助程序选项包括:


   @await Html.PartialAsync

   @await Html.RenderPartialAsync

   @Html.Partial

   @Html.RenderPartial


本文档中的示例均使用产品模型:

C#


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。 使用 for 属性,将模型传递给分部视图进行绑定。

CSHTML


<partial name="Shared/_ProductPartial.cshtml" for="Product">


针对


for 属性分配要根据当前模型评估的 ModelExpression。 ModelExpression 推断 @Model. 语法。 例如,可使用 for="Product" 而非 for="@Model.Product"。 通过使用 @ 符号定义内联表达式来替代此默认推理行为。


以下标记加载 _ProductPartial.cshtml:

CSHTML


<partial name="_ProductPartial" for="Product">


分部视图绑定到关联页模型的 Product 属性:

C#


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 属性进行绑定:

CSHTML


<partial name="_ProductPartial"

        model='new Product { Number = 1, Name = "Test product", Description = "This is a test" }'>


view-data


view-data 属性分配 ViewDataDictionary,以传递到分部视图。 以下标记使整个 ViewData 集合可访问分部视图:

CSHTML


@{

   ViewData["IsNumberReadOnly"] = true;

}


<partial name="_ProductViewDataPartial" for="Product" view-data="ViewData">


在前面的代码中,IsNumberReadOnly 键值设置为 true 并添加到 ViewData 集合中。 因此,在以下分部视图中可访问 ViewData["IsNumberReadOnly"]:

CSHTML


@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 模型的实例传递给分部视图进行绑定。

CSHTML


@foreach (var product in Model.Products)

{

   @await Html.PartialAsync("_ProductPartial", product)

}


以下分部标记帮助程序可实现与 PartialAsync HTML 帮助程序相同的异步呈现行为。 model 属性分配有 Product 模型实例以绑定到分部视图。

CSHTML


@foreach (var product in Model.Products)

{

   <partial name="_ProductPartial" model="product" />

}


其他资源


   ASP.NET Core 中的分部视图

   ASP.NET Core MVC 中的视图