ViewModels o ViewBag?

Soy bastante nuevo en MVC4, EF5 y ASP.Net, y parece que no puedo encontrar una buena respuesta en ningún lado.

Básicamente, ¿se debe hacer todo a través del modelo de vista o está bien incorporar también viewbag?

Digamos que tengo un método que completa una lista desplegable, y estoy usando un modelo de vista para representar el resultado de la vista.

¿Estoy bien para usar Viewbag.DropDown = PopulateDropdown(); o sería mejor incorporar esto en ViewModel, creando una propiedad para contener la List creada por PopulateDropdown(); ?

Sé lo práctico que es ViewBag, pero aún no veo ninguna razón sólida para no usarlo. Si alguien pudiera ofrecerme más información, sería fantástico.

Básicamente, ¿se debe hacer todo a través del modelo de vista o está bien incorporar también viewbag?

Todo debe hacerse dentro de un modelo de vista. Eso es lo que es un modelo de vista. Una clase que define específicamente para cumplir con los requisitos de su vista. No mezcle ViewBags con ViewModels. Ya no está claro para la vista de dónde viene la información. Utilice solo un modelo de vista (enfoque que recomiendo) o solo use ViewBags. Pero no mezcle el 2.

Entonces, en su ejemplo particular, usted tendría una propiedad en su modelo de vista que es de tipo IENumerable y dentro de su vista usará la versión fuertemente tipada de Html.DropDownListFor helper para enlazar al modelo:

 @Html.DropDownListFor(x => x.ProductId, Model.Products) 

Obviamente esos son solo mis 2 centavos. Otras personas dirán que mezclar ViewModels y ViewBags está bien y yo respeto su opinión.

Prefiere ViewModels en ViewBag siempre que sea posible. Crear vistas fuertemente tipadas. Hace su código más limpio, menos frágil, menos propenso a errores y fácil de mantener.

ViewBags son solo diccionarios de objetos escritos dinámicamente, por lo que se pierde:

  • Tiempo de comstackción
  • La capacidad de refactorizar con confianza (pierde el soporte de las herramientas)
  • Soporte IDE, como la capacidad de navegar a todos los usos
  • Intellisense

Para los puntos de bonificación que hacen un uso extenso del ViewBag, también se pierde el punto de utilizar el patrón MVC

Me da la impresión de que los ViewBags se crearon para resolver un problema de fondo en asp.net y la gente los usa en lugar de crear modelos de vista como se pretendía originalmente en el diseño de la plataforma, en detrimento de su trabajo.


gracias a https://stackoverflow.com/a/15568190/10245