Hilfsprogramm für Teiltags in ASP.NET Core

Von Scott Addie

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

Anzeigen oder Herunterladen von Beispielcode (Vorgehensweise zum Herunterladen)

Übersicht

Das Hilf hilft für partielle Tags wird zum Rendern einer Teilansicht in Razor Pages- und 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.

Das folgende Markup verwendet einen expliziten Pfad, der angibt, dass _ProductPartial.cshtml aus dem Ordner 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">

für

Das for -Attribut weist eine ModelExpression zu bewertende für das aktuelle Modell zu. 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 eine ViewDataDictionary zu, die an die Teilansicht übergeben werden soll. 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. Gemäß dem ersten Parameter der PartialAsync Methode wird die _ProductPartial.cshtml Teilansicht 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