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