Cuándo y cómo usar ViewBag

7

Soy un estudiante que trabaja en un proyecto de mvc para mover un sitio de coldfusion a .net mvc. También estamos rediseñando el sitio en el proceso, por lo que estoy trabajando con otros miembros del equipo, los miembros del equipo de diseño tienen una comprensión básica de la afeitadora, pero no se espera que conozcan ninguna otra parte del marco.

Siempre he intentado usar ViewBag lo menos posible, ahora más aún porque los diseñadores no saben qué hay en el ViewBag al crear las vistas, y no obtengo ninguna inteligencia.

Desde que trabajé en este proyecto, pasé a usar ViewBag solo en el controlador de base para el proyecto, agregando propiedades en OnActionExecuted para que cada vista tenga las mismas propiedades de ViewBag . También he intentado usar solo las propiedades ViewBag en los diseños.

Desde que hice esto, me he preguntado cuáles son las buenas razones para agregar alguna vez al ViewBag en una acción del controlador directamente antes de llamar a la vista. He llegado a apreciar que hacer más ViewModels mientras que un poco más de tiempo ayuda a informar exactamente lo que debe hacer una vista, además de agregar claridad.

Quería saber cuándo otras personas usaron ViewBag donde lo encontraron apropiado y para qué lo usaron. No puedo pensar en usarlo en ningún momento fuera de un controlador de base ahora, esperaba obtener información sobre otros usos para el ViewBag que tal vez solo falto. ¿Debería agregar algo al ViewBag directamente antes de llamar a una acción, o debo crear un ViewModel más sólido en estos casos?

    
pregunta Tenderdude 08.12.2016 - 18:28

1 respuesta

6

Un ViewBag es esencialmente un Diccionario, excepto que la sintaxis es un poco más limpia. En lugar de escribir

myDict["SomeProperty"]

puede acceder a los elementos del diccionario dinámico con notación de puntos de primera clase:

myViewBag.SomeProperty

Debido a que ViewBag es una propiedad de ControllerBase , proporciona un lugar conveniente para almacenar pares clave / valor durante las operaciones del controlador, utilizando una sintaxis de primera clase. Lo usaría cada vez que necesite enviar pares clave / valor a una Vista, y desea la comodidad y la sintaxis limpia de un diccionario dynamic .

ViewBag deriva de DynamicViewData , lo que le da algunas propiedades útiles. Por ejemplo:

// Implementing this function extends the ViewBag contract, supporting or improving some scenarios. For example
// having this method improves the debugging experience as it provides the debugger with the list of all
// properties currently defined on the object.
public override IEnumerable<string> GetDynamicMemberNames()
{
    return ViewData.Keys;
}

En general, preferiría los objetos ViewModel fuertemente tipificados sobre los diccionarios ViewBag o ViewData , ya que los objetos fuertemente tipados le brindan seguridad de tipo de tiempo de compilación. Esto es especialmente cierto si tiene datos estructurados complejos para pasar a la Vista.

Ver también
ExpandoObject

    
respondido por el Robert Harvey 08.12.2016 - 19:43

Lea otras preguntas en las etiquetas

Comentarios Recientes

se proporciona a los diseñadores, en diferentes campos y disciplinas, la forma más sencilla de diferenciar los diferentes enfoques es desarrollar métodos alternativos de diseño de su aplicación o sistema basados en sesgos cognitivos. Dependiendo de la complejidad del proyecto, tendrá que encontrar esta información de "No encontrado" en "Desafortunadamente este campo de investigación no le interesa", lo que refleja impresiones erróneas sobre el tema al realizar algunos estudios y elegir el tema con el que está... Lee mas