2010-02-26 23 views
6

Tengo una aplicación ASP.NET MVC con bastantes listas desplegables y listas de selección múltiple. Esencialmente, muchas listas de opciones.Modelo ASP.NET MVC vs ViewData para listas seleccionadas

Mi pregunta es; ¿Es mejor pasar estas listas a la vista como parte del Modelo o como ViewData?

Actualmente los estoy pasando como ViewData ya que realmente no los necesito en el modelo y parecen potencialmente voluminosos para pasar el modelo (obtengo el elemento o elementos seleccionados, que en realidad es todo lo que necesito). En el lado negativo, ViewData necesita emitir en la Vista, que no es tan agradable como el modelo fuertemente tipado.

¿Existe una mejor práctica aquí? Incluso las sugerencias de pros y contras para cualquiera de estos serían apreciadas.

Respuesta

6

Le recomiendo que use ViewModels para pasar esos datos. Es un error usar ViewData con "magic strings" y prefiero usar intellisense en lugar de tratar de recordar esas "cadenas mágicas". Y no necesita crear esa lista de selección en el controlador. Solo use algo de IEnumerable y use el método de extensión ToSelectList de MvcContrib en la vista.

+1

+1 Como una cuestión de convención, hemos hecho todo lo posible para eliminar cadenas mágicas. No solo por lo que mencionaste, porque intellisense es fantástico, pero el verdadero truco es que las cadenas mágicas siempre compilan bien. Luego tienen la oportunidad de explotar en tiempo de ejecución. Ouch ... Las cosas fuertemente tipadas explotan en tiempo de compilación, lo que hace que los errores sean mucho más fáciles de detectar. –

-1

Tiendo a usar ViewData si solo tengo 1 artículo que estoy pasando a la vista. Entonces, si está enviando múltiples objetos y necesita llenar múltiples listas desplegables, crearía un modelo de vista. También crearía ese modelo de vista en el proyecto de la aplicación web, de modo que si su modelo de vista tiene objetos SelectList, no necesitará una referencia al archivo DLL de MVC en su modelo de dominio.

+0

¿Y esto es algo bueno? – Lankymart