ASP MVC 4 – Introduction à Razor, transmettre des données dynamiquement

Pour transmettre des données avec MVC 4, trois options sont disponibles : ViewData, ViewBag et TempData.

 

ViewData :

ViewData est un dictionnaire d’objet dérivé de la classe ViewDataDictionary et est accessible par clés de type string.

Exemple :

 ViewData[“today”] = DateTime.Now;
 ViewData[“name”] = “Moi”;

ViewData permet de communiquer des données entre le controleur et la vue, et ces données sont persistantes d’une requête à l’autre.

Note: ViewData nécessite de caster les données selon le type et de vérifier les valeurs nulles pour gérer les erreurs.

 

ViewBag:

ViewBag, est un objet aux propriétés dynamiques (C#4.0+), et tout comme ViewData, il permet de communiquer des données entre le controleur et la vue (avec des données persistantes).

Exemple:

 ViewBag.Today = DateTime.Now;
 ViewBage.Name = “Moi”;

Note: ViewBag ne nécessite pas de typage des données.

 

TempData:

TempData est , quant à lui, un dictionnaire dérivé de TempDataDictionary et est stocké dans de courtes sessions. La différence entre TempData et ViewData réside dans le cycle de vie de l’objet. TempData garde l’information sur la durée de la requête HTTP uniquement, et est donc le plus souvent utilisé retourné un message d’erreur si une requête échoue..

Exemple:

 [HttpPost]
 public ActionResult DoSomething(Product p) {
   TempData["productDetails"] =
     string.Format("Product description{0}", p.Description);
   return RedirectToAction("Index");
 }

(Page d’index)

 <div>
   @if (TempData["productDetails"] != null) {
     <p>@TempData["productDetails"]</p>
   }
 </div>