2008-10-06 22 views
88

Sé qué es ViewData y lo uso todo el tiempo, pero en ASP.NET Preview 5 introdujeron algo nuevo llamado TempData.Diferencia entre ViewData y 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?

¿Existen mejores prácticas para esto?

+0

Me gustaría agregar algo sobre 'TempData' aquí http://stackoverflow.com/a/17199709/2015869 –

Respuesta

89

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, this article tiene una buena descripción del ciclo de vida TempData.

Como se ha dicho Ben Scheirman here:

TempData es un diccionario de almacenamiento temporal sesión con respaldo que está disponible para una sola petición. Es genial pasar mensajes entre los controladores.

+1

Ambos enlaces se están rompiendo :( – IsmailS

+0

Creo que es una gran diferencia, ya que' TempData' implicará algo potencialmente mucho más complicado (la sesión) que un simple diccionario que se pasa del método t o método –

26

Cuando una acción devuelve un resultado RedirectToAction produce 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.

+0

¿Se conservará el valor de ViewData en el mismo caso? – IsmailS

+9

@Ismail: No, ViewData no conservará los datos a través de Redirect. Esa es la principal diferencia de TempData. –

1

ViewData:

  • ViewData es un tipo de diccionario public ViewDataDictionary ViewData { get; set; }
  • Se puede utilizar para transferir datos desde el controlador para ver, de una manera única
  • Es la vida se encuentra solamente durante la petición actual
  • Si pasa una cadena, entonces no es necesario encasillar
  • Si pasa un objeto, entonces necesita encasillarlo pero antes de eso que comprobar si no es nulo
  • Es una propiedad en ControllerBase, que es el padre de la clase controlador

TempData:

  • TempData utilizan internamente TempDataDictionary public TempDataDictionary TempData { get; set; }
  • vez que los datos se guarda en el objeto TempDataDictionary
  • Persiste y puede estar listo desde cualquier vista o acción en cualquier controlador
  • Sólo se puede leer una vez, una vez leído, se hace nula
  • se ahorra en la sesión así sucesivamente expiración de la pérdida de datos de sesión
  • Este comportamiento es nuevo desde ASP.NET MVC 2 y esta última versión.
  • En versiones anteriores de ASP.NET MVC, los valores en TempData sólo estaba disponible hasta la siguiente petición
  • Es la vida, hasta que se lee o sesión caduca y se puede leer desde cualquier lugar

See the comparison of ViewData, ViewBag, TempData and Session in MVC in detail