2009-07-28 6 views
1

J'ai un contrôleur qui met TempData avant de retourner une vue,TempData pas persistant

public ActionResult Edit(int id, int? order) 
{ 
    Route route = new Route(); 
    // Do Work 
    TempData["Route"] = route; 
    return View(new FormViewModel(route, obj1, obj2)); 
} 

Ce point de vue contians une vue partielle avec un lien qui va à une autre méthode d'action appelée suppression, le code pour le lien de suppression est :

<%= Html.ActionLink("Delete", "Delete", new { order = item.Order })%> 

le code de la méthode d'action Supprimer est:

public ActionResult Delete(int order) 
{ 
    Route route = (Route)TempData["Route"]; 
    // Do Work 
} 

le probl que je reçois est quand j'essaie d'obtenir TempData ["Route"]; de la méthode d'action Delete renvoie null.

Je me demande si le problème est que c'est un Get et pas un Post? Si oui, comment puis-je publier un message dans le formulaire ActionMethod à partir de mon formulaire?

Répondre

7

TempData persiste entre deux demandes. Que retourne la méthode ReturnView dans votre action Edit? Autant que je sache, ce n'est pas une méthode standard définie dans la classe Controller. Redirigez-vous dans cette méthode (c'est-à-dire renvoyer un RedirectToRouteResult)?

Y a-t-il d'autres demandes qui pourraient se produire entre vos actions Modifier et Supprimer? Par exemple des requêtes ajax.

Généralement, il n'est pas recommandé d'utiliser TempData pour conserver un objet pendant longtemps. Le modèle est généralement le suivant:

public ActionResult Update() 
{ 
    // When you put something into the TempData dictionary you usually 
    // redirect immediately to an action that will use the object stored 
    // inside. 
    TempData["something"] = "something"; 
    return RedirectToAction("success"); 
} 

public ActionResult Success() 
{ 
    var something = TempData["something"]; 
    return View(); 
} 

Si vous devez persister quelque chose plus longtemps, vous devez utiliser Session.

+0

J'ai édité le post, c'était une faute de frappe, aurait dû être retourné View() pas returnview. – Fermin

+1

Qu'en est-il des requêtes ajax qui pourraient invalider TempData? –

+0

L'a corrigé, c'était un problème avec SessionState. Trié avec quelques modifications au web.config. – Fermin

0

Un autre facteur de TempData ne fonctionne pas lorsque votre application est sous un système distribué.

Questions connexes