Helper tag Partial in ASP.NET Core

Di Scott Addie

Per una panoramica degli helper tag, vedere Helper tag in ASP.NET Core.

Visualizzare o scaricare il codice di esempio (procedura per il download)

Panoramica

L'helper tag parziale viene usato per il rendering di una visualizzazione parziale nelle Razor app Pages e MVC. Tenere presente che:

  • Richiede ASP.NET Core 2.1 o versione successiva.
  • Rappresenta un'alternativa alla sintassi helper HTML.
  • Esegue il rendering della visualizzazione parziale in modo asincrono.

Le opzioni helper HTML per il rendering di una visualizzazione parziale includono:

Il modello Product è usato negli esempi di questo documento:

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

        public string Name { get; set; }

        public string Description { get; set; }
    }
}

Segue un inventario degli attributi dell'helper tag Partial.

name

L'attributo name è obbligatorio. Indica il nome o il percorso della visualizzazione parziale di cui eseguire il rendering. Quando viene offerto un nome della visualizzazione parziale, viene avviato il processo di individuazione delle visualizzazioni. Tale processo viene ignorato quando viene offerto un percorso esplicito. Per tutti i valori name accettabili, vedere Individuazione delle visualizzazioni parziali.

Il markup seguente usa un percorso esplicito, che indica che _ProductPartial.cshtml deve essere caricato dalla cartella Condivisa . Mediante l'attributo for un modello viene passato alla visualizzazione parziale per l'associazione.

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

for

L'attributo for assegna un ModelExpression oggetto da valutare rispetto al modello corrente. Un elemento ModelExpression deduce la sintassi @Model.. Ad esempio for="Product" può essere usato invece di for="@Model.Product". Questo comportamento di inferenza predefinito può essere ignorato se si usa il simbolo @ per definire un'espressione inline.

Il markup seguente carica _ProductPartial.cshtml:

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

La visualizzazione parziale è correlata alla proprietà Product del modello di pagina associato:

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"
            };
        }
    }
}

modello

L'attributo model assegna un'istanza del modello da passare alla visualizzazione parziale. L'attributo model non può essere usato con l'attributo for.

Nel markup seguente viene creata un'istanza di un nuovo oggetto Product che viene quindi passata all'attributo model per il binding:

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

view-data

L'attributo view-data assegna un ViewDataDictionary oggetto da passare alla visualizzazione parziale. Il markup seguente rende l'intera raccolta ViewData accessibile alla visualizzazione parziale:

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

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

Nel codice precedente, il valore della chiave IsNumberReadOnly è impostato su true e aggiunto alla raccolta ViewData. Di conseguenza l'elemento ViewData["IsNumberReadOnly"] viene reso accessibile all'interno della visualizzazione parziale seguente:

@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 questo esempio il valore di ViewData["IsNumberReadOnly"] determina se il campo Number viene visualizzato come campo di sola lettura.

Eseguire la migrazione da un helper HTML

Osservare l'esempio di helper HTML asincrono seguente. Viene eseguita l'iterazione e visualizzata una raccolta di prodotti. Per il PartialAsync primo parametro del metodo, viene caricata la _ProductPartial.cshtml visualizzazione parziale. Un'istanza del modello Product viene passata alla visualizzazione parziale per l'associazione.

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

L'helper tag Partial seguente consente di ottenere lo stesso comportamento asincrono dell'helper HTML PartialAsync. All'attributo model viene assegnata un'istanza del modello Product per l'associazione alla visualizzazione parziale.

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

Risorse aggiuntive