usar mvc como asp.net-mvc session-variables

asp.net-mvc - mvc - viewbag vs viewdata



Cuál es el momento adecuado para ViewData, ViewBag, Session, TempData (3)

ASP.net MVC introdujo ViewData, ViewBag, TempData, Session para pasar datos entre el controlador y la vista.

Ver datos

ViewData se implementa utilizando la clase ViewDataDictionary que se almacena en CurrentRequestContext . Por lo tanto, el ciclo de vida de ViewData finalizará cuando finalice la solicitud actual.

ViewBag también es como ViewData, y la única diferencia es que permite compartir dinámicamente los datos utilizando objetos dinámicos.

TempData es una instancia de muy corta vida, y solo debe usarla solo durante las solicitudes actuales y subsiguientes. Esto será útil si quiere usar Redirecciones (RedirectToAction, RedirectToRoute, Redirect) en ASP.net MVC y pasar algunos datos entre los redireccionamientos. TempData almacena datos en Session pero framework descarta los datos cuando finalizan las solicitudes actuales y subsiguientes.

La sesión es de larga duración (nunca caduca) datos que pertenecen a la sesión del usuario. Debe tener en cuenta cuando utiliza variables de sesión que pueden ser fácilmente causa de problemas.

protected void Session_Start(Object sender, EventArgs e) { int userType = 1; HttpContext.Current.Session.Add("_SessionUserType",userType ); }

Estaba editando un proyecto y vi una sesión [""] en un método de controlador y TempData [""] en otro. ¿Hay alguna diferencia entre los 4 o son solo 4 formas de hacer lo mismo?


Ver datos:

  • Es un diccionario especial heredado de ViewDataDictionary .
  • Se usa para enviar datos desde el controlador para ver.
  • Su vida útil es la solicitud actual.
  • Será destruido si tienes Redirect .
  • Por razones de seguridad, es mejor comprobar si es null antes del uso.
  • El lanzamiento debe hacerse para la operación.

ViewBag:

  • Es un tipo dinámico (este tipo se presenta en c # 4).

  • Al igual que ViewData se usa para enviar datos del controlador a la vista.

  • La duración de la validez de sus valores en la solicitud actual.
  • En la redirección entre páginas, su valor será nulo.
  • Por razones de seguridad antes del uso, verifíquelo para null .
  • El lanzamiento no es necesario , por lo que es más rápido que ViewData .

TempData:

  • Un tipo especial de diccionario derivado de TempDataDictionary .
  • Tiene un tiempo de vida corto y se usa para enviar información entre páginas ( Redirect ).
  • Después de renderizar la View completo, su valor será null .
  • Por razones de seguridad antes del uso, verifíquelo para null .
  • El lanzamiento debe hacerse para la operación.

Sesión:

  • utilizado para enviar información entre diferentes solicitudes.
  • Su valor no es null ni valores nulos; A menos que transcurra un tiempo determinado (la session expire ).
  • Por razones de seguridad antes del uso, verifíquelo para null .
  • El lanzamiento debe hacerse para la operación.

This artículo explica la diferencia entre ViewData, ViewBag y TempData. Espero que pueda recomendar este artículo para su necesidad.


  • ViewData / ViewBag - válido solo por la duración de la solicitud actual.
    Lo configura en una acción de controlador y lo usa en la vista, luego desaparece.
    La diferencia es que el primero es un diccionario, mientras que el segundo es simplemente un contenedor dynamic alrededor de este diccionario.
    Ambos apuntan a los mismos datos sin embargo.
    ViewBag se introdujo en ASP.NET MVC 3.

Ejemplo:

public ActionResult Index() { ViewData["foo"] = "bar"; return View(); }

y dentro de la vista puede usar este valor:

<div>@ViewData["foo"]</div>

Lo mismo con ViewBag, pero es dinámico:

public ActionResult Index() { ViewBag.foo = "bar"; return View(); }

y dentro de la vista puede usar este valor:

<div>@ViewBag.foo</div>

Como puede ver, ViewData / ViewBag es solo una forma alternativa de pasar información a una vista desde una acción de controlador en comparación con la forma clásica y recomendada que está usando un modelo de vista:

public class MyViewModel { public string Foo { get; set; } }

y entonces:

public ActionResult Index() { var model = new MyViewModel { Foo = "bar" }; return View(model); }

y dentro de su vista fuertemente tipada:

@model MyViewModel <div>@Html.DisplayFor(x => x.Foo)</div>

Como puede ver, el uso de modelos de vista proporciona un enfoque fuertemente tipado al pasar información a una vista desde una acción del controlador.

  • TempData : permite la persistencia de la información durante una única solicitud posterior. Almacena algo dentro de TempData y luego lo redirecciona. En la acción del controlador de destino a la que redirigió, puede recuperar el valor que estaba almacenado dentro de TempData.

Ejemplo:

public ActionResult Foo() { TempData["foo"] = "bar"; return RedirectToAction("bar"); } public ActionResult Bar() { var value = TempData["foo"] as string; // use the value here. If you need to pass it to the view you could // use ViewData/ViewBag (I can''t believe I said that but I will leave it for the moment) return View(); }

ASP.NET MVC expirará automáticamente el valor que se almacenó en TempData una vez que lo haya leído. Bajo las cubiertas ASP.NET MVC persiste la información en la Session .

  • Sesión : igual que TempData, excepto que nunca caduca, será válido para todas las solicitudes, ni una sola redirección.