web-dev-qa-db-fra.com

Utilisation de Tempdata dans ASP.NET MVC - Meilleures pratiques

J'utilise ASP.NET MVC 3 pour créer une application Web.

Ce que j'essaie de faire est de transmettre des valeurs entre deux contrôleurs, bien qu'il y ait plusieurs façons de faire cela. Je suis particulièrement intéressé par l'utilisation de TempData pour cela.

public ActionResult Action1()
{
    string someMessage;
    Test obj = SomeOperation();
    if(obj.Valid)
    {
        someMessage = obj.UserName;
    }
    else
    {
        someMessage = obj.ModeratorName;
    }

    TempData["message"] = someMessage;

    return RedirectToAction("Index");
}

public ActionResult Index()
{
    ViewBag.Message = TempData["message"]

    return View();
}

Donc, l'utilisation de TempData ici est-elle correcte? Je veux dire sous les meilleures pratiques de programmation, est-ce la bonne façon d'utiliser TempData?

Dans quels cas en temps réel devrait-on utiliser TempData?

Remarque: J'ai parcouru les liens suivants

Merci

65
Yasser

TempData est un compartiment dans lequel vous pouvez vider des données qui ne sont nécessaires que pour la requête suivante. C'est-à-dire que tout ce que vous mettez dans TempData est rejeté à la fin de la demande suivante. Ceci est utile pour les messages uniques, tels que les erreurs de validation de formulaire. Il est important de noter ici que cela s'applique à la demande suivante dans la session, de sorte que cette demande peut potentiellement se produire dans une autre fenêtre ou un autre onglet du navigateur.

Pour répondre à votre question spécifique: il n'y a pas de bonne façon de l'utiliser. Tout dépend de la convivialité et de la commodité. Si cela fonctionne, a du sens et que d’autres le comprennent relativement facilement, c’est bien. Dans votre cas particulier, le passage d'un paramètre de cette manière est correct, mais il est étrange que vous deviez le faire (odeur de code?). Je préférerais conserver une telle valeur dans les ressources (s'il s'agit d'une ressource) ou dans la base de données (s'il s'agit d'une valeur persistante). D'après votre utilisation, cela ressemble à une ressource, puisque vous l'utilisez pour le titre de la page.

J'espère que cela t'aides.

69
Display Name

Veuillez noter que MVC 3 a changé le comportement de TempData en matière de persistance. Désormais, la valeur de TempData est conservée jusqu'à sa lecture, et pas uniquement pour la requête suivante.

La valeur de TempData persiste jusqu'à sa lecture ou jusqu'à l'expiration de la session. La persistance de TempData de cette manière active des scénarios tels que la redirection, car les valeurs de TempData sont disponibles au-delà d'une seule demande. https://msdn.Microsoft.com/en-in/library/dd394711%28v=vs.100%29.aspx

54
Yogi

Sachez que la persistance de TempData est un peu délicate. Par exemple, si vous lisez simplement simplement TempData dans la requête en cours, il sera supprimé et par conséquent, vous ne l'avez pas pour la requête suivante. Au lieu de cela, vous pouvez utiliser la méthode Peek. Je recommanderais de lire cet article cool:

MVC Tempdata, Peek et Keep confusion

16
Mojtaba