2009-05-27 5 views
2

Il existe des valeurs que je dois transmettre lorsque j'effectue des redirections. Je veux utiliser TempData pour accomplir ceci, mais j'ai rencontré un problème. J'utilise un contrôleur spécial pour générer des JavaScripts dynamiques. Par exemple, il pourrait y avoir une balise de script comme ceci:ASP.NET MVC: Préserve TempData sur plusieurs demandes

<script type="text/javascript" src="/Resource/Script/Login.js"></script> 

... mais il n'y a pas de fichier script "Login.js." Au lieu de cela, l'action du script ResourceController est appelé:

public class ResourceController : Controller { 
    public ActionResult Script(string id) { 
     // set script = some code 
     return JavaScript(script); 
    } 
} 

Le problème est, ce dévore la requête suivante, ce qui signifie que je ne peux pas utiliser TempData pour rediriger sur une page avec un script dynamique. Est-il possible que l'action de script (ou ResourceController dans son ensemble) peut choisir de ne pas consommer TempData, ce qui lui permet d'être disponible pour la prochaine requête "réelle"?

Merci d'avance!

+1

S'il vous plaît, un exemple de code show où vous définissez TempData et appelez RedirectToAction(). –

Répondre

3

La session est conservée entre plusieurs demandes.

+2

D'accord - il vous manque le point de TempData si vous le voulez faire – joshcomley

5

Vous pouvez placer la ligne

<script type="text/javascript" src="/Resource/Script/Login.js"></script> 

après avoir utilisé TempData en vue.

Cet article pourrait également être utile pour vous: ASP.NET MVC TempData Is Really RedirectData

+1

Je recommanderais certainement cet article aussi! – joshcomley

+1

cet article est utile – aleemb

2

Demandez à votre contrôleur Supertype passer outre ExecuteCore, ce qui efface TempData. Je ne dis pas que ce soit une bonne idée ...

protected override void ExecuteCore() 
{ 
    string actionName = RouteData.GetRequiredString("action"); 
    if (!ActionInvoker.InvokeAction(ControllerContext, actionName)) 
    { 
     HandleUnknownAction(actionName); 
    } 
} 
0

Pourquoi ne pas créer un PreserveTempDataAttribute que vous pouvez décorer votre action Script avec. Il peut réaffecter le TempData s'il n'est pas nul.

8

L'équipe Asp.Net a supprimé cette douleur dans MVC 2 en introduisant TempData.Keep(), qui s'assure que tous les éléments TempData sont marqués pour une demande supplémentaire. Appelez ceci de toutes les actions que vous voulez pas pour manger TempData.

Lire la raison d'être l'introduction de Keep() dans Jacques Eloffs blog post

Keep() in MSDN docs

Questions connexes