Helper tag Partial in ASP.NET CorePartial Tag Helper in ASP.NET Core

Di Scott AddieBy Scott Addie

Per una panoramica degli helper tag, vedere Helper tag in ASP.NET Core.For an overview of Tag Helpers, see Helper tag in ASP.NET Core.

Visualizzare o scaricare il codice di esempio (procedura per il download)View or download sample code (how to download)

PanoramicaOverview

L'helper tag Partial viene usato per il rendering di una visualizzazione parziale in Razor Pages e nelle app MVC.The Partial Tag Helper is used for rendering a partial view in Razor Pages and MVC apps. Tenere presente che:Consider that it:

  • Richiede ASP.NET Core 2.1 o versione successiva.Requires ASP.NET Core 2.1 or later.
  • Rappresenta un'alternativa alla sintassi helper HTML.Is an alternative to HTML Helper syntax.
  • Esegue il rendering della visualizzazione parziale in modo asincrono.Renders the partial view asynchronously.

Le opzioni helper HTML per il rendering di una visualizzazione parziale includono:The HTML Helper options for rendering a partial view include:

Il modello Product è usato negli esempi di questo documento:The Product model is used in samples throughout this document:

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.An inventory of the Partial Tag Helper attributes follows.

namename

L'attributo name è obbligatorio.The name attribute is required. Indica il nome o il percorso della visualizzazione parziale di cui eseguire il rendering.It indicates the name or the path of the partial view to be rendered. Quando viene offerto un nome della visualizzazione parziale, viene avviato il processo di individuazione delle visualizzazioni.When a partial view name is provided, the view discovery process is initiated. Tale processo viene ignorato quando viene offerto un percorso esplicito.That process is bypassed when an explicit path is provided. Per tutti i valori name accettabili, vedere Individuazione delle visualizzazioni parziali.For all acceptable name values, see Partial view discovery.

Il markup seguente usa un percorso esplicito, che indica che _ProductPartial.cshtml deve essere caricato dalla cartella Shared.The following markup uses an explicit path, indicating that _ProductPartial.cshtml is to be loaded from the Shared folder. Mediante l'attributo for un modello viene passato alla visualizzazione parziale per l'associazione.Using the for attribute, a model is passed to the partial view for binding.

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

forfor

L'attributo for assegna una ModelExpression da valutare rispetto al modello corrente.The for attribute assigns a ModelExpression to be evaluated against the current model. Un elemento ModelExpression deduce la sintassi @Model..A ModelExpression infers the @Model. syntax. Ad esempio for="Product" può essere usato invece di for="@Model.Product".For example, for="Product" can be used instead of for="@Model.Product". Questo comportamento di inferenza predefinito può essere ignorato se si usa il simbolo @ per definire un'espressione inline.This default inference behavior is overridden by using the @ symbol to define an inline expression.

Il markup seguente carica _ProductPartial.cshtml:The following markup loads _ProductPartial.cshtml:

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

La visualizzazione parziale è correlata alla proprietà Product del modello di pagina associato:The partial view is bound to the associated page model's Product property:

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

modellomodel

L'attributo model assegna un'istanza del modello da passare alla visualizzazione parziale.The model attribute assigns a model instance to pass to the partial view. L'attributo model non può essere usato con l'attributo for.The model attribute can't be used with the for attribute.

Nel markup seguente viene creata un'istanza di un nuovo oggetto Product che viene quindi passata all'attributo model per il binding:In the following markup, a new Product object is instantiated and passed to the model attribute for binding:

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

view-dataview-data

L'attributo view-data assegna un ViewDataDictionary da passare alla visualizzazione parziale.The view-data attribute assigns a ViewDataDictionary to pass to the partial view. Il markup seguente rende l'intera raccolta ViewData accessibile alla visualizzazione parziale:The following markup makes the entire ViewData collection accessible to the partial view:

@{
    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.In the preceding code, the IsNumberReadOnly key value is set to true and added to the ViewData collection. Di conseguenza l'elemento ViewData["IsNumberReadOnly"] viene reso accessibile all'interno della visualizzazione parziale seguente:Consequently, ViewData["IsNumberReadOnly"] is made accessible within the following partial view:

@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.In this example, the value of ViewData["IsNumberReadOnly"] determines whether the Number field is displayed as read only.

Eseguire la migrazione da un helper HTMLMigrate from an HTML Helper

Osservare l'esempio di helper HTML asincrono seguente.Consider the following asynchronous HTML Helper example. Viene eseguita l'iterazione e visualizzata una raccolta di prodotti.A collection of products is iterated and displayed. Per il primo parametro del metodo PartialAsync, viene caricata la visualizzazione parziale _ProductPartial.cshtml.Per the PartialAsync method's first parameter, the _ProductPartial.cshtml partial view is loaded. Un'istanza del modello Product viene passata alla visualizzazione parziale per l'associazione.An instance of the Product model is passed to the partial view for binding.

@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.The following Partial Tag Helper achieves the same asynchronous rendering behavior as the PartialAsync HTML Helper. All'attributo model viene assegnata un'istanza del modello Product per l'associazione alla visualizzazione parziale.The model attribute is assigned a Product model instance for binding to the partial view.

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

Risorse aggiuntiveAdditional resources