ASP.NET Core 的部分標記協助程式
作者:Scott Addie
如需標籤協助程式的概觀,請參閱 ASP.NET Core 中的標籤協助程式。
檢視或下載範例程式碼 \(英文\) (如何下載)
概觀
部分標記協助程式用於在 Razor 頁面和 MVC 應用程式中呈現部分檢視。 請考慮它:
- 需要 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
屬性 (Attribute) 是必要項。 它會指出要呈現之部分檢視的名稱或路徑。 當提供部分檢視名稱時,就會起始檢視探索程序。 提供明確的路徑時,則會略過該程序。 如需了解所有可接受的 name
值,請參閱部分檢視探索。
下列標記會使用明確的路徑,指出將從 Shared 資料夾載入 _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
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)
}
下列 Partial 標籤協助程式可完成與 PartialAsync
HTML 協助程式相同的非同步轉譯行為。 model
屬性會獲指派 Product
模型執行個體,以繫結至部分檢視。
@foreach (var product in Model.Products)
{
<partial name="_ProductPartial" model="@product" />
}