Hilfsprogramm für Teiltags in ASP.NET Core

Von Scott Addie

Eine Übersicht über Taghilfsprogramme finden Sie unter Taghilfsprogramme in ASP.NET Core.

Anzeigen oder Herunterladen von Beispielcode (Vorgehensweise zum Herunterladen)

Überblick

Das Hilfsprogramm für Teiltags wird für das Rendern einer Teilansicht in Razor Pages und in MVC-Apps verwendet. Bedenken Sie dabei Folgendes:

  • Das Programm erfordert ASP.NET Core 2.1 oder höher.
  • Es stellt eine Alternative zur Syntax des HTML-Hilfsprogramms dar.
  • Es rendert die Teilansicht asynchron.

Folgende zählen zu den Optionen des HTML-Hilfsprogramms für das Rendern einer Teilansicht:

Das Modell Product wird in den Beispielen in diesem Dokument verwendet:

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

        public string Name { get; set; }

        public string Description { get; set; }
    }
}

Eine Auflistung der im Hilfsprogramm für Teiltags enthaltenen Attribute folgt.

name

Das name-Attribut ist erforderlich. Es gibt den Namen oder den Pfad der Teilansicht an, die gerendert werden soll. Wenn der Name einer Teilansicht bereitgestellt wird, wird der Prozess Ansichtsermittlung initiiert. Dieser Prozess wird umgangen, wenn ein expliziter Pfad bereitgestellt wird. Eine Übersicht über alle verfügbaren name-Werte finden Sie unter Ermitteln von Teilansichten.

Folgendes Markup verwendet einen expliziten Pfad, der angibt, dass _ProductPartial.cshtml aus dem Ordner Shared (Freigegeben) geladen werden soll. Wenn Sie das Attribut for verwenden, wird an Modell zur Bindung an die Teilansicht übergeben.

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

for

Das for-Attribut weist ein ModelExpression-Element zu, das für das aktuelle Modell ausgewertet werden soll. Ein ModelExpression-Element leitet die @Model.-Syntax ab. for="Product" kann beispielsweise anstelle von for="@Model.Product" verwendet werden. Dieses Standardverhalten für die Ableitung kann überschrieben werden, indem Sie das @-Symbol zum Definieren eines Inlineausdrucks verwenden.

Das folgende Markup lädt _ProductPartial.cshtml:

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

Die Teilansicht ist an die Product-Eigenschaft des zugehörigen Seitenmodells gebunden:

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

Das model-Attribut weist eine Modellinstanz zu, die an die Teilansicht übergeben werden soll. Das model-Attribut kann nicht mit dem for-Attribut verwendet werden.

Im folgenden Markup wird ein neues Product-Objekt instanziiert und an das model-Attribut zur Bindung übergeben:

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

view-data

Das view-data-Attribut weist ViewDataDictionary zu, um die Teilansicht zu übergeben. Folgendes Markup stellt die gesamte ViewData-Auflistung für die Teilansicht zur Verfügung:

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

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

Im vorangehenden Code wird der Schlüsselwert IsNumberReadOnly auf true festgelegt und zur ViewData-Auflistung hinzugefügt. Folglich wird ViewData["IsNumberReadOnly"] innerhalb der folgenden Teilansicht zur Verfügung gestellt:

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

In diesem Beispiel bestimmt der Wert von ViewData["IsNumberReadOnly"], ob das Feld Number (Anzahl) schreibgeschützt sein soll.

Migrieren von einem HTML-Hilfsprogramm

Sehen Sie sich das folgende Beispiel für das Hilfsprogramm für asynchrone HTML an. Eine Sammlung von Produkten wird durchlaufen und dargestellt. Laut dem ersten Parameter der PartialAsync-Methode wird die Teilansicht _ProductPartial.cshtml geladen. Eine Instanz des Product-Modells wird für die Bindung an die Teilansicht übergeben.

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

Das folgende Teiltaghilfsprogramm erreicht dasselbe asynchrone Renderingverhalten wie das PartialAsync-HTML-Hilfsprogramm. Dem model-Attribut wird eine Product-Modellinstanz zum Binden an die Teilansicht zugewiesen.

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

Zusätzliche Ressourcen