Saltar al contenido

Mejores prácticas de MVC ViewBag

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> en su modelo de vista para pasar los datos desplegables. Aquí hay una publicación con un código de ejemplo sobre cómo hacerlo.

¿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.

¡Haz clic para puntuar esta entrada!
(Votos: 0 Promedio: 0)



Utiliza Nuestro Buscador

Deja una respuesta

Tu dirección de correo electrónico no será publicada. Los campos obligatorios están marcados con *