Nota
El acceso a esta página requiere autorización. Puede intentar iniciar sesión o cambiar directorios.
El acceso a esta página requiere autorización. Puede intentar cambiar los directorios.
Por Scott Addie
Para obtener información general sobre los asistentes de etiquetas, consulte asistentes de etiquetas en ASP.NET Core.
Ver o descargar código de ejemplo (cómo descargar)
Visión general
El asistente de etiquetas parciales sirve para representar una vista parcial en las páginas de Razor y las aplicaciones MVC. Tenga en cuenta lo siguiente:
- Requiere ASP.NET Core 2.1 o posterior.
- Es una alternativa a la sintaxis del asistente de HTML.
- Representa la vista parcial de forma asincrónica.
Las opciones del asistente HTML para representar una vista parcial incluyen:
El modelo del producto se utiliza en muestras a lo largo de este documento.
namespace TagHelpersBuiltIn.Models
{
public class Product
{
public int Number { get; set; }
public string Name { get; set; }
public string Description { get; set; }
}
}
A continuación se muestra un inventario de los atributos auxiliares de etiquetas parciales.
nombre
Se requiere el atributo name
. Indica el nombre o la ruta de acceso de la vista parcial que se va a mostrar. Cuando se indica el nombre de una vista parcial, se inicia el proceso de detección de vista. Ese proceso se omite cuando se proporciona una ruta de acceso explícita. Para conocer todos los valores name
aceptables, consulte Detección de vistas parciales.
En el siguiente marcado se usa una ruta de acceso explícita, lo que indica que _ProductPartial.cshtml
debe cargarse desde la carpeta Shared. Mediante el atributo for, se pasa un modelo a la vista parcial para el enlace.
<partial name="Shared/_ProductPartial.cshtml" for="Product">
para
El atributo for
asigna un ModelExpression que se va a evaluar con respecto al modelo actual. Un ModelExpression
deduce la sintaxis @Model.
. Por ejemplo, se puede usar for="Product"
en lugar de for="@Model.Product"
. Este comportamiento de inferencia predeterminado se invalida mediante el uso del símbolo @
para definir una expresión insertada.
En el marcado siguiente se carga _ProductPartial.cshtml
:
<partial name="_ProductPartial" for="Product">
La vista parcial está enlazada a la propiedad Product
del modelo de página asociado:
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"
};
}
}
}
modelo
El atributo model
asigna una instancia de modelo para pasar a la vista parcial. El atributo model
no se puede usar con el atributo para el atributo.
En el siguiente código de marcado, se crea un objeto Product
y se pasa al atributo model
para el enlace:
<partial name="_ProductPartial"
model='new Product { Number = 1, Name = "Test product", Description = "This is a test" }'>
view-data
El atributo view-data
asigna una ViewDataDictionary para pasarla a la vista parcial. El marcado siguiente hace que toda la colección ViewData sea accesible para la vista parcial:
@{
ViewData["IsNumberReadOnly"] = true;
}
<partial name="_ProductViewDataPartial" for="Product" view-data="ViewData">
En el código anterior, el valor de clave IsNumberReadOnly
se establece en true
y se agrega a la colección ViewData. Por tanto, ViewData["IsNumberReadOnly"]
estará accesible dentro de la vista parcial siguiente:
@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>
En este ejemplo, el valor de ViewData["IsNumberReadOnly"]
determina si el campo Número se muestra como de solo lectura.
Migración desde un asistente HTML
Considere el siguiente ejemplo de asistente HTML asincrónico. Se itera y se muestra una colección de productos. Según el primer parámetro del método PartialAsync
, se carga la _ProductPartial.cshtml
vista parcial. Se pasa una instancia del modelo Product
a la vista parcial para el enlace.
@foreach (var product in Model.Products)
{
@await Html.PartialAsync("_ProductPartial", product)
}
El siguiente asistente de etiquetas parciales logra el mismo comportamiento de representación asincrónica que el asistente html de PartialAsync
. Al atributo model
se le asigna una instancia de modelo Product
para enlazar a la vista parcial.
@foreach (var product in Model.Products)
{
<partial name="_ProductPartial" model="@product" />
}