Necesito crear una vista que muestra información del Encabezado del Pedido y necesito agregar un patial vista que muestra una cuadrícula de Elementos de Línea. La vista parcial va a ser inflexible desde una perspective. Entiendo que debo usar el html helper @Html.Parcial(«Ruta/vista»). Sólo he utilizado los controladores hasta ahora para abrir una vista, poblando el viewmodel, antes de enviarlo a la vista. Desde la visión parcial que se llama la forma de la ayuda html, me gustaría saber es cuál sería la mejor manera para rellenar el parcial de la vista con el modelo de datos.

InformationsquelleAutor Alan Fisher | 2012-12-07

2 Comentarios

  1. 48

    Opción 1: Heredar de la página principal

    Por defecto, cualquier visión parcial prestados llamando @Html.Partial("PartialViewName") se obtiene el punto de vista del modelo pasa a la vista principal.

    Así que si usted tiene:

    Modelo De Vista

    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 OrderLineItems página debe obtener un MyNamespace.OrderViewModel pasado… por lo que su vista parcial debe tener este aspecto:

    OrderLineItems.cshtml

    @model MyNamespace.OrderInfoViewModel
    
    foreach (var orderItem in Model.OrderItems)
    {
        //Do stuff
    }

    Opción 2: Especificar el modelo de

    Puede usar el segundo parámetro para especificar el modelo de vista para ser aprobada. I. e.

    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: Uso parcial de las acciones

    Si usted necesita para volver a usar una vista parcial a través de varias páginas, podría ser una buena idea usar una vista parcial para eliminar la necesidad de llenar de vista diferentes modelos con la misma información, ya que la página va a estar usando el mismo parcial.

    E. g.

    Modelo De Vista

    namespace MyNamesapce
    {
        public OrderInfoViewModel
        {
            public string OrderTitle { get; set; }
        }
    }

    Controlador de

    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
    }
    • ¿Cuál es el escenario en el que la opción 3 sería la opción preferida de más de 2? No podía acabo de llamar a la vista parcial en repetidas ocasiones y todavía estar SECO?
    • Usando la opción 1 & 2, usted debe llenar la página principal ver el modelo con todos los datos necesarios para la vista parcial. El escenario en esta pregunta / respuesta no es la mejor, así que digamos que había un carrito de compras resumen widget que aparece en muchas páginas… sería más fácil usar la Opción #3. De lo contrario, cada acción individual que también se muestran en el carrito de la compra widget (la mayoría de las páginas) sería responsable para rellenarla de vista del modelo con los datos de la cesta de la compra widget necesidades.
    • Justo ahora me doy cuenta de que tendría que continuamente embudo del modelo en la vista parcial indirectamente, en lugar de directamente.
    • Creo que la opción 3 es parecida a la que uso en mi situación. Me va a utilizar el mismo encabezado para todas las órdenes, pero uno de los tres diferentes elemento de línea de vista parcial dependiendo de donde en el proceso de la orden. Parece que éste es el mejor lugar para asignar la vista parcial dinámicamente sería en el controlador.
  2. 5

    Con una vista parcial, se le acaba de enviar un Modelo igual que lo haría con una Vista normal. Por ejemplo, si su Modelo tiene una propiedad de LineItem objetos llamado ‘LineItems’ simplemente haría esto:

    @Html.Partial("_PartialName", Model.LineItems)

    Ahora bien, si su Modelo no tiene esa propiedad, puede agregarlo, o pasar de otra manera, como ViewBag (yo prefiero un establecimiento inflexible de tipos de método, pero esa es mi opnion:

    @Html.Partial("_PartialName", (List<LineItem>)ViewBag.LineItems)

    Estas no son las únicas maneras, pero son mis métodos preferidos.

Dejar respuesta

Please enter your comment!
Please enter your name here