TempData, ni ViewData est censé être réglé dans une vue. Une vue est supposée consommer des données qui ont été stockées dans ces structures à l'intérieur des actions de votre contrôleur (bien, en fait, ce n'est pas le cas, une vue est supposée consommer un modèle de vue mais c'est un autre sujet). TempData peut être utilisé lorsque vous souhaitez conserver des informations entre deux redirections. Il devrait être placé à l'intérieur d'une action de contrôleur qui redirige vers une autre action du contrôleur qui va lire les données:
public ActionResult Foo()
{
SomeModel model = ...
TempData["foo"] = model;
return RedirectToAction("Bar");
}
public ActionResult Bar()
{
var model = TempData["foo"] as SomeModel;
...
}
donc une action de contrôleur devrait obtenir des données de la structure TempData que si cette action a été invoquée après une redirection d'une autre action qui définit les données. Une telle action de contrôleur ne doit jamais être appelée depuis une vue car si vous avez une vue, cela signifie que cette vue a été rendue à partir d'une action du contrôleur qui a vraisemblablement défini les données dans TempData, mais il y a toujours un risque. le serveur - AJAX ou quelque chose), le TempData sera perdu.
Pour votre cas, lorsqu'une vue doit appeler le serveur, il existe essentiellement 3 techniques:
- Utilisez un HTML
<form>
avec des champs d'entrée qui envoie les données au serveur
- Utilisez une ancre et transmettre des données en tant que paramètres de chaîne de requête au contrôleur
- Utilisez javascript et envoyer une requête AJAX ou une redirection vers le serveur
Vous n'êtes pas censé définir TempData de vue, si vous avez besoin de cela, pensez à changer votre conception –