ASP .NET Core MVC – Utilités de TempData

ASP .NET Core MVC propose un dictionnaire (où chaque élément est identifié par une clé unique et une valeur / un objet) nommé TempData, permettant de maintenir l’état des données côté serveur pour chaque utilisateur d’une application. Quelles sont ses utilités ?

  • Permettre à une vue partielle de communiquer des données à la vue qui a demandé son exécution.
  • Maintenir l’état des données entre l’exécution de deux actions après une redirection.

Cet article met l’accent sur cette dernière utilité.

L’objet TempData permet de conserver des données après la redirection vers une action d’un contrôleur. Voici un exemple :

public class HomeController : Controller
{
    public IActionResult Index()
    {
        TempData["Id"] = "A150D";
        return this.RedirectToAction(nameof(HomeController.LireTempData));
    }

    public IActionResult LireTempData()
    {
        string id = (string)TempData["Id"] ?? string.Empty;
        return View((object)id);
    }
}

Lorsque la méthode RedirectToAction est exécutée, une réponse implicite est renvoyée au navigateur. Cette réponse demande au navigateur de renvoyer au serveur une requête HTTP, permettant d’exécuter l’action passée en paramètre de cette méthode. Ainsi, dans la vue correspondant à l’action LireTempData, le modèle de cette vue vaut « A150D ».
Si une nouvelle requête est envoyée par le navigateur, suite à une action effectuée par l’utilisateur dans la vue retournée par l’action LireTempData, alors les données ne sont pas conservées dans l’objet TempData. Toutefois, en modifiant l’implémentation de la méthode LireTempData :

 public IActionResult LireTempData()
{
    string id = (string)TempData["Id"] ?? string.Empty;
    TempData.Keep("Id"); // Nouvelle instruction
    return View((object)id);
}

La donnée dont la clé est Id dans TempData est conservée côté serveur lors de l’envoie d’une requête HTTP.

About: James RAVAILLE

Travaillant avec la plateforme Microsoft .NET depuis 2002, j’alterne les missions de formation et d’ingénierie avec cette plateforme. J’écris ce blog pour transmettre mes connaissances à tout développeur, qu’il soit débutant ou expérimenté.