usar sesiones net mvc manejo como asp asp.net-mvc

asp.net mvc - sesiones - Diferencia entre ViewData y TempData?



viewbag list (4)

Sé lo que es ViewData y lo uso todo el tiempo, pero en ASP.NET Preview 5 introdujeron algo nuevo llamado TempData.

Normalmente escribo fuertemente mi ViewData, en lugar de utilizar el enfoque del diccionario de objetos.

Entonces, ¿cuándo debería usar TempData en lugar de ViewData?

¿Hay alguna mejor práctica para esto?


Cuando una acción devuelve un resultado RedirectToAction causa un redireccionamiento HTTP (equivalente a Response.Redirect). Los datos pueden conservarse en la propiedad TempData (diccionario) del controlador mientras dure una única solicitud de redireccionamiento HTTP.


En una frase: TempData son como ViewData con una diferencia: solo contienen datos entre dos solicitudes sucesivas, después de eso se destruyen. Puede usar TempData para pasar mensajes de error o algo similar.

Aunque obsoleto, este artículo tiene una buena descripción del ciclo de vida de TempData .

Como dijo Ben Scheirman here :

TempData es un diccionario de almacenamiento temporal respaldado por una sesión que está disponible para una única solicitud. Es genial pasar mensajes entre los controladores.



Ver datos:

  • ViewData es un tipo de diccionario public ViewDataDictionary ViewData { get; set; } public ViewDataDictionary ViewData { get; set; }
  • Se puede usar para pasar datos del controlador a la vista, solo de una manera
  • Su vida se encuentra solo durante la solicitud actual
  • Si pasa la secuencia, entonces no es necesario encasillar
  • Si pasa un objeto, entonces necesita encasillarlo, pero antes de eso debe verificar si no es nulo.
  • Es una propiedad en ControllerBase , que es el padre de la clase Controller

TempData:

  1. TempData utiliza internamente TempDataDictionary : public TempDataDictionary TempData { get; set; } public TempDataDictionary TempData { get; set; }
  2. Una vez que los datos se guardan en el objeto TempDataDictionary :
    • Persiste en él y se puede leer desde cualquier vista o acción en cualquier controlador
    • Solo se puede leer una vez; una vez leída, se vuelve nula
    • Se guarda en la sesión, por lo que al caducar los datos de la sesión se pierde.

Este comportamiento es nuevo de ASP.NET MVC 2 y últimas versiones. En versiones anteriores de ASP.NET MVC, los valores en TempData estaban disponibles solo hasta la próxima solicitud.

  1. Está vivo, hasta que se lee o la sesión expira y se puede leer desde cualquier lugar.

Consulte la comparación de ViewData, ViewBag, TempData y Session en MVC en detalle