ASP .NET Core MVC – Utilisation des objets ViewData / ViewBag / TempData
Introduction
ASP .NET Core MVC propose différents objets permettant de communiquer des données entre les différents éléments d’une application. Volontairement cet article ne traite pas de la communication d’un Model / ViewModel du contrôleur à une vue. Ces objets sont les suivants : ViewData, ViewBag et TempData. Voici un schéma permettant de résumer leur rôle que nous détaillerons dans cet article :

Les éléments d’une application ASP .NET MVC Core
Une application ASP .NET Core MVC contient trois principaux éléments : les classes du modèle, les vues et les contrôleurs. Les vues regroupent les vues non partielles, les vues partielles et les vues de disposition.
Le schéma ci-dessus présente les éléments suivants :
- Les contrôleurs : classe contenant des actions qui sont exécutées suite à une opération de routage
- Les vues de disposition (_Layout.cshtml) : fichier cshtml contenant le cadre principal de l’application
- Les vues non partielles : vues dont le contenu est affiché dans une vue de disposition
- Les vues partielles : vues permettant de factoriser des éléments de présentation entre les vues non partielles (y compris la vue de disposition)
Rôles des objets ViewData, ViewBag et TempData
D’après le schéma ci-dessus, les rôles des objets de communication sont les suivants :
- ViewData / ViewBag (ViewBag est un wrapper vers ViewData) :
- Permet à un contrôleur de fournir des données / objets à une vue partielle ou non partielle
- Permet à un élément de présentation de fournir des données / objets à un autre élément de présentation
- TempData. En plus des rôles assurés par les objets ViewData / ViewBag :
- Permet à un contrôleur de communiquer des données et des objets à une autre de ses actions, ou une action d’un autre contrôleur (utilisation de la méthode RedirectToRoute). Dans ce cas, les objets doivent être sérialisés / parsés (par exemple au format Json).
- Permet la communication bidirectionnelle de données et des objets entre une vue non partielle ou une vue de disposition et une vue partielle