J'étais en train de modifier un projet et j'ai vu une session [""] dans une méthode de contrôleur et TempData [""] dans une autre. Y a-t-il une différence entre les 4 ou est-ce juste 4 façons de faire la même chose.
dynamic
autour de ce dictionnaire.Exemple:
public ActionResult Index()
{
ViewData["foo"] = "bar";
return View();
}
et à l'intérieur de la vue, vous pouvez utiliser cette valeur:
<div>@ViewData["foo"]</div>
Pareil avec ViewBag mais c'est dynamique:
public ActionResult Index()
{
ViewBag.foo = "bar";
return View();
}
et à l'intérieur de la vue, vous pouvez utiliser cette valeur:
<div>@ViewBag.foo</div>
Donc, comme vous pouvez le voir, ViewData/ViewBag ne sont qu'un moyen alternatif de transmettre des informations à une vue à partir d'une action de contrôleur par rapport à la manière classique et recommandée qui utilise un modèle de vue:
public class MyViewModel
{
public string Foo { get; set; }
}
et alors:
public ActionResult Index()
{
var model = new MyViewModel { Foo = "bar" };
return View(model);
}
et à l'intérieur de votre vue fortement typée:
@model MyViewModel
<div>@Html.DisplayFor(x => x.Foo)</div>
Comme vous pouvez le voir, l'utilisation de modèles de vue fournit une approche fortement typée pour transmettre des informations à une vue à partir d'une action de contrôleur.
Exemple:
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 expirera automatiquement la valeur qui a été stockée dans TempData
une fois que vous l'avez lu. Sous les couvertures, ASP.NET MVC conserve les informations dans le Session
.
ASP.net MVC introduit ViewData, ViewBag, TempData, Session pour passer les données entre les contrôleurs à afficher.
ViewData
ViewData est implémenté à l'aide de la classe ViewDataDictionary qui est stockée dans CurrentRequestContext. Ainsi, le cycle de vie de ViewData se terminera à la fin de la demande en cours.
ViewBag est également comme ViewData, et la seule différence est qu'il permet de partager dynamiquement les données en utilisant des objets dynamiques.
TempData est une instance à très courte durée de vie, et vous ne devez l'utiliser que pendant les requêtes current et suivantes uniquement. Cela sera pratique si vous souhaitez utiliser les redirections (RedirectToAction, RedirectToRoute, Redirect) dans ASP.net MVC et transmettre certaines données entre les redirections. TempData stocke les données dans Session mais le framework supprime les données à la fin des requêtes actuelles et suivantes.
Session est une donnée longue durée (N'expire jamais) qui appartient à la session utilisateur. Vous devez être attentif lorsque vous utilisez des variables de session qui peuvent facilement causer des problèmes.
protected void Session_Start(Object sender, EventArgs e)
{
int userType = 1;
HttpContext.Current.Session.Add("_SessionUserType",userType );
}
ViewData:
ViewDataDictionary
.Redirect
.null
avant utilisation.ViewBag:
Est un type dynamique (ce type est présenté en c # 4).
Comme ViewData
est utilisé pour envoyer des données du contrôleur à la vue.
null
.ViewData
.TempData:
TempDataDictionary
.Redirect
).View
complètement, sa valeur sera null
.null
.Session:
null
pas des valeurs nulles; Sauf après un certain temps (session expire
).null
.This article explique la différence entre ViewData, ViewBag et TempData. J'espère que vous pourrez consulter cet article pour votre besoin.