40 votos

Ciclo de vida del ViewBag/ViewData

He visto muchos posts acerca de cuándo usar ViewBag/ViewData vs ViewModel, pero no he sido capaz de encontrar una explicación del ciclo de vida de la ViewBag.

Por ejemplo, tengo dos métodos de Acción en un Controlador:

// POST: /MyModel/Edit/5
[HttpPost]
public ActionResult Edit(MyModel _mymodel){}

y

// GET: /MyModel/Edit/5
public ActionResult Edit(int id){}

Si pongo algunos valores en el ViewBag en el método de acción, establecer alguna Forma de etiquetas, a continuación, cuando el usuario hace clic el botón "Enviar" y el Formulario es enviado de nuevo al servidor vía HTTP POST, el ViewBag de valores ya no son en el POST método de acción.

Por favor alguien puede explicar (o de referencias a buen artículo) el ciclo de vida de la ViewBag/ViewData ?

42voto

Zach Green Puntos 2297

Los datos que usted pone en el ViewBag/ViewData sólo está disponible durante el ciclo de vida de la solicitud dentro de los cuales se poblado. MVC no tiene post espaldas. Si usted necesita algo que perduran a lo largo de más de una solicitud, usted debe utilizar Sesión.

Aquí es un buen artículo acerca de las diferencias entre ViewData, ViewBag, y TempData: http://rachelappel.com/when-to-use-viewbag-viewdata-or-tempdata-in-asp.net-mvc-3-applications

13voto

Chris Moschini Puntos 7278

El aceptó respuesta aquí no es realmente describir el ciclo de vida de ViewBag/ViewData. Es lamentable parece ser que no hay una documentación clara sobre esto. Sin embargo, con base en esto:

http://blogs.msdn.com/b/varunm/archive/2013/10/03/understanding-of-mvc-page-life-cycle.aspx

Parece que el ciclo de vida es:

Solicitud IIS -> Routing -> Controlador MVC -> Controlador (con ViewData) -> View (con ViewData) -> Eliminación

Así, el ViewData (que ViewBag simplemente envuelve) en realidad iba a ser instanciado con el ControllerContext, al mismo tiempo TempData se crea una instancia. Esto ocurre en un par de pasos después del Paso 4: MVC Controlador Ejecuta.

Hay un interesante paso adelante donde "Si la Página tiene ViewData, el ViewData se establece" durante la entrega del Controlador a la Vista. ViewData es claramente disponible antes de este, a fin de establecer no puede significar crear una instancia. Parece que en lugar de decir que es transferido desde el Controlador (que recuerde que no está disponible a la Vista) a la ViewContext (el contenedor que proporciona el punto de Vista de acceso a ViewBag/ViewData, y el Modelo).

El ViewData es de suponer que se eliminan al mismo tiempo que el resto de la Vista.

Es importante tener en cuenta también que MVC Vistas son prestados desde el interior, por lo que el particular punto de Vista y las tareas que realiza en el ViewBag ocurrirá lo mismo en el orden de dentro a fuera. Eso significa que algo en una Vista niño página estará disponible a un Layout, pero añadiendo algo a un ViewBag en un Diseño y, a continuación, la lectura en una Vista de página del niño va a fallar.

2voto

veblock Puntos 874

Desde MSDN - ViewBag: La dinámica de la vista del diccionario de datos, ViewData: El diccionario de datos de la vista.

Así que estos/este es un diccionario para un determinado punto de vista. Establece sus valores en su acción y la utiliza en su punto de vista. Como Zach dijo que no va a volver con la solicitud posterior. Usted puede enviar su vuelta a los valores de cualquier acción como un campo de formulario, en el querystring, etc, pero estos valores no disponibles automáticamente como VieBag sus propiedades.

0voto

sudhakar Puntos 81

ViewBagy ViewData se utilizan para el mismo propósito. Se utilizan para pasar datos de los controladores a la vista. Cuando asignamos datos ni objeto les son accesibles desde el punto de vista.

  • ViewData: ViewData es un diccionario de objetos y son accesibles por la cadena como clave.
  • ViewBag: Utiliza la función dinámica. Permite que un objeto Añadir propiedades dinámicas a la misma.

Iteramos.com

Iteramos es una comunidad de desarrolladores que busca expandir el conocimiento de la programación mas allá del inglés.
Tenemos una gran cantidad de contenido, y también puedes hacer tus propias preguntas o resolver las de los demás.

Powered by:

X