Luego de buscar en diversos repositorios y páginas webs de internet al final dimos con la solución que te mostramos a continuación.
Solución:
ViewBag es un diccionario dinámico. Entonces, cuando use ViewBag para transferir datos entre métodos de acción y vistas, su compilador no podrá detectar si comete un error tipográfico en su código al intentar acceder al elemento ViewBag en su vista. Su vista se bloqueará en tiempo de ejecución 🙁
En general, es una buena idea usar un modelo de vista para transferir datos entre sus métodos de acción y sus vistas. view model es una clase POCO simple que tiene propiedades específicas para la vista. Entonces, si desea pasar algunos datos adicionales para ver, agregue una nueva propiedad a su modelo de vista y utilícela. Las vistas fuertemente escritas hacen que el código sea más limpio y más fácil de mantener. Con este enfoque, no necesita hacer una conversión explícita de su elemento de diccionario viewbag a algunos tipos de ida y vuelta que tiene que hacer con view bag.
public class ProductsForCategoryVm
public string CategoryName set;get;
public List Products set;get;
public class ProductVm
public int Id set;get;
public string Name set;get;
Y en su método de acción, cree un objeto de este modelo de vista, cargue las propiedades y envíelo a la vista.
public ActionResult Category(int id)
var vm= new ProductsForCategoryVm();
vm.CategoryName = "Books";
vm.Products= new List
new ProductVm Id=1, Name="The Pragmatic Programmer" ,
new ProductVm Id=2, Name="Clean Code"
return View(vm);
Y su vista, que está fuertemente tipada en el modelo de vista,
@model ProductsForCategoryVm
@Model.CategoryName
@foreach(var item in Model.Products)
@item.Name
datos desplegables?
Muchos tutoriales/libros tienen ejemplos de código que usan ViewBag para datos desplegables. Personalmente, sigo sintiendo que ViewBag no debería usarse para esto. Debe ser una propiedad de tipo List
¿Hay situaciones en las que un ViewBag es absolutamente necesario?
Hay algunos casos de uso válidos en los que puede (no es necesario) usa ViewBag para enviar datos. Por ejemplo, si desea mostrar algo en su página de diseño, puede usar ViewBag para eso. Otro ejemplo es ViewBag.Title
(para el título de la página) presente en la plantilla MVC predeterminada.
public ActionResult Create()
ViewBag.AnnouncementForEditors="Be careful";
return View();
Y en el diseño, puede leer el ViewBag.AnnouncementForEditors
@ViewBag.AnnouncementForEditors
@RenderBody()
1) Es mi suposición por encima de la mejor práctica. (No usar un ViewBag y segundo tenerlo en el modelo de vista)
Debería usar modelos de vista en lugar de pasar datos a través de ViewBag tanto como sea posible.
2) ¿Existen situaciones en las que una ViewBag sea absolutamente necesaria?
No existe ninguna situación en la que una ViewBag sea absolutamente necesaria. Sin embargo, hay algunos datos que personalmente prefiero usar ViewBag en lugar de View Model. Por ejemplo, cuando necesito completar un cuadro desplegable para valores predefinidos (es decir, Ciudades), uso ViewBag para llevar SelectListItem array para ver. Prefiero no contaminar mis ViewModels con estos datos.
1) Es mi suposición por encima de la mejor práctica. (No usar un ViewBag y segundo tenerlo en el modelo de vista)
Sí.
2) ¿Existen situaciones en las que una ViewBag sea absolutamente necesaria?
No. Todo lo que haya almacenado en un ViewBag podría ir al modelo de vista pasado a la vista.
Si conservas algún recelo y forma de renovar nuestro sección eres capaz de ejecutar una interpretación y con gusto lo estudiaremos.