2009-08-14 20 views
5

Tengo una vista fuertemente tipada a una clase de elemento. En mi controlador necesito enviar dos listas diferentes. ¿Hay alguna manera más fácil de hacer esto que no sea crear una nueva clase con dos listas?Asp.Net MVC - Vista muy tipada con dos listas del mismo tipo

Lo que estoy tratando de hacer es tener en mi página de inicio 10 elementos ordenados por fecha, y 10 artículos ordenados por Popularidad.

LO QUE HICE

realidad Fui con una combinación de las dos respuestas. Escribí con fuerza mi Vista a la nueva clase que creé con las dos listas. Luego escribí fuertemente dos vistas parciales en cada una de las listas. Puede parecer exagerado, pero me gusta cómo resultó.

Respuesta

10

"crear una nueva clase con dos listas" es el camino a seguir. Se llama modelo de vista y, una vez que lo adoptas, se abre realmente el poder de las vistas fuertemente tipadas. Puede ser así de simple:

public class IndexViewModel 
{ 
    public List<Item> Newest { get; set; } 
    public List<Item> Popular { get; set; } 
} 
3

Es lo que John sugirió o no tener una vista inflexible y agregarlos a la ViewData:

vistas parciales
ViewData["Newest"] = Newest; 
ViewData["Popular"] = Popular 

Otra opción sería inflexible de tipos.

1

Debe hacer un modelo que incluya ambas listas específicamente para la vista.

Por lo general en el pequeño MVC que he hecho, he hecho un modelo para cada vista incluso si simplemente transmiten datos idénticos que fueron servidos por datos o capa de negocio solo para mantener la separación entre las dos partes muy estricta . Esta configuración es un poco más de trabajo y no es necesaria en muchos casos simples, pero mantiene las cosas más limpias en mi opinión.

4

Hay dos filosofías generales para esto. El primero es tomar el enfoque de John Sheehan. Usted crea un modelo de vista personalizado con ambas listas y lo pasa a su vista fuertemente tipada.

El segundo es considerar las listas como datos "auxiliares" y ponerlas en ViewData como se indica en jeef3. Pero, cuando renderiza las listas, usa un parcial fuertemente tipado.

ViewData["Newest"] = Newest; 
ViewData["Popular"] = Popular 

Con esto quiero decir en su vista principal, que se dice renderPartial (...) pero al pasarle la tecla vista de datos que utilizó.

Y su parcial se vería así:

<%@ ViewUserControl Inherits="System.Web.Mvc.ViewUserControl<List<Item>>" %> 
... 

Esto da que ha escrito fuertemente el acceso a esos datos de vista desde el interior de su parcial.

Cuestiones relacionadas