Pomocnik tagów częściowych w ASP.NET Core

Autor: Scott Addie

Aby zapoznać się z omówieniem pomocników tagów, zobacz Pomocnicy tagów na platformie ASP.NET Core.

Wyświetl lub pobierz przykładowy kod (jak pobrać)

Omówienie

Pomocnik tagów częściowych służy do renderowania widoku częściowego w Razor aplikacjach Pages i MVC. Należy wziąć pod uwagę, że:

  • Wymaga ASP.NET Core 2.1 lub nowszej.
  • Jest alternatywą dla składni pomocnika HTML.
  • Renderuje widok częściowy asynchronicznie.

Opcje pomocnika HTML do renderowania widoku częściowego obejmują:

Model produktu jest używany w przykładach w tym dokumencie:

namespace TagHelpersBuiltIn.Models
{
    public class Product
    {
        public int Number { get; set; }

        public string Name { get; set; }

        public string Description { get; set; }
    }
}

Poniżej przedstawiono spis atrybutów pomocnika tagów częściowych.

name

name Atrybut jest wymagany. Wskazuje nazwę lub ścieżkę widoku częściowego do renderowania. Po podaniu częściowej nazwy widoku inicjowany jest proces odnajdywania widoku. Ten proces jest pomijany po podaniu jawnej ścieżki. Aby uzyskać wszystkie dopuszczalne name wartości, zobacz Odnajdywanie widoku częściowego.

Poniższy znacznik używa jawnej ścieżki wskazującej, że _ProductPartial.cshtml ma zostać załadowany z folderu Udostępnione. Za pomocą atrybutu for model jest przekazywany do widoku częściowego do powiązania.

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

for

Atrybut for przypisuje ModelExpression element do oceny względem bieżącego modelu. Wywnioskuje ModelExpression składnię @Model. . Można na przykład for="Product" użyć zamiast for="@Model.Product". To domyślne zachowanie wnioskowania jest zastępowane przy użyciu symbolu @ w celu zdefiniowania wyrażenia wbudowanego.

Następujące znaczniki są ładowane _ProductPartial.cshtml:

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

Widok częściowy jest powiązany z właściwością skojarzonego modelu Product strony:

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

Atrybut model przypisuje wystąpienie modelu do przekazania do widoku częściowego. Atrybut model nie może być używany z atrybutem for .

W poniższym znaczniku nowy Product obiekt jest tworzone i przekazywany do atrybutu model do powiązania:

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

view-data

Atrybut view-data przypisuje ViewDataDictionary element do przekazania do widoku częściowego. Poniższy znacznik sprawia, że cała kolekcja ViewData jest dostępna dla widoku częściowego:

@{
    ViewData["IsNumberReadOnly"] = true;
}

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

W poprzednim kodzie IsNumberReadOnly wartość klucza jest ustawiana na true i dodawana do kolekcji ViewData. ViewData["IsNumberReadOnly"] W związku z tym program jest dostępny w następującym widoku częściowym:

@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>

W tym przykładzie wartość ViewData["IsNumberReadOnly"] określa, czy pole Liczba jest wyświetlane jako tylko do odczytu.

Migrowanie z pomocnika HTML

Rozważmy następujący asynchroniczny przykład pomocnika HTML. Kolekcja produktów jest iteracja i wyświetlana. PartialAsync Na pierwszy parametr _ProductPartial.cshtml metody jest ładowany widok częściowy. Wystąpienie Product modelu jest przekazywane do widoku częściowego do powiązania.

@foreach (var product in Model.Products)
{
    @await Html.PartialAsync("_ProductPartial", product)
}

Poniższy pomocnik tagów częściowych osiąga to samo zachowanie asynchroniczne renderowania co PartialAsync pomocnik HTML. Atrybut model jest przypisywany Product do wystąpienia modelu do powiązania z widokiem częściowym.

@foreach (var product in Model.Products)
{
    <partial name="_ProductPartial" model="@product" />
}

Dodatkowe zasoby