asp.net mvc - una - Cómo llenar la vista parcial de la maquinilla de afeitar mvc
render partial view mvc 5 (2)
Con una vista parcial, solo está enviando un Modelo como lo haría con una Vista normal. Por ejemplo, si su Modelo tiene una propiedad de objetos LineItem llamada ''LineItems'', simplemente haría esto:
@Html.Partial("_PartialName", Model.LineItems)
Ahora bien, si su Modelo no tiene esa propiedad, puede agregarla o pasarla de otra manera, como ViewBag (prefiero un método fuertemente tipado, pero esa es mi opción:
@Html.Partial("_PartialName", (List<LineItem>)ViewBag.LineItems)
Estas no son las únicas formas, pero son mis métodos preferidos.
Necesito crear una vista que muestre la información del Encabezado del pedido y necesito agregar una vista del patial que muestre una grilla de elementos de línea. La vista parcial se escribirá con fuerza desde un modelo de vista. Entiendo que debería usar html helper @ Html.Partial ("Ruta / vista"). Solo he usado controladores hasta ahora para abrir una vista, poblando el modelo de vista antes de enviarlo a la vista. Dado que se está llamando a la vista parcial desde el helper html, me gustaría saber cuál sería la mejor manera de poblar la vista parital con los datos del modelo.
Opción 1: Heredar de la página principal
De forma predeterminada, cualquier vista parcial representada llamando a @Html.Partial("PartialViewName")
hará que el modelo de vista pase a la vista principal.
Entonces si tienes:
Ver modelo
namespace MyNamesapce
{
public OrderInfoViewModel
{
public string OrderTitle { get; set; }
public IEnumerable<OrderItem> OrderItems { get; set; }
}
}
OrderInfo.cshtml
@model MyNamespace.OrderInfoViewModel
<h1>@Model.OrderTitle</h1>
@Html.Partial("OrderLineItems")
La página OrderLineItems debe obtener un MyNamespace.OrderViewModel
pasa ... para que su vista parcial se vea así:
OrderLineItems.cshtml
@model MyNamespace.OrderInfoViewModel
foreach (var orderItem in Model.OrderItems)
{
//Do stuff
}
Opción 2: especificar el modelo
Puede usar el segundo parámetro para especificar el modelo de vista que se pasará. Es decir
OrderInfo.cshtml
@model MyNamespace.OrderInfoViewModel
<h1>@Model.OrderTitle</h1>
@Html.Partial("OrderLineItems", Model.OrderItems)
OrderLineItems.cshtml
@model IEnumerable<OrderItem>
foreach (var orderItem in Model)
{
//Do stuff
}
Opción 3: usar acciones parciales
Si necesita reutilizar una vista parcial en varias páginas, podría ser una buena idea usar una vista parcial para eliminar tener que completar diferentes modelos de vista con la misma información solo porque la página va a usar el mismo parcial.
P.ej
Ver modelo
namespace MyNamesapce
{
public OrderInfoViewModel
{
public string OrderTitle { get; set; }
}
}
Controlador
public class OrderController : Controller
{
public ActionResult OrderInfo(int orderId)
{
OrderInfoViewModel viewModel = GetViewModel(orderId);
return View(viewModel);
}
public PartialViewResult OrderLineItems(int orderId)
{
IEnumerable<OrderItem> orderItems = GetOrderItems(orderId);
return Partial(orderItems);
}
}
OrderInfo.cshtml
@model MyNamespace.OrderInfoViewModel
<h1>@Model.OrderTitle</h1>
@Html.Action("OrderLineItems")
OrderLineItems.cshtml
@model IEnumerable<OrderItem>
foreach (var orderItem in Model.OrderItems)
{
//Do stuff
}