2009-05-27 5 views
2

Es gibt Werte, die ich weitergeben muss, wenn ich Redirects führe. Ich möchte TempData verwenden, um dies zu erreichen, aber ein Problem aufgetreten.ASP.NET MVC: TempData über mehrere Anfragen hinweg erhalten

Ich verwende einen speziellen Controller, um dynamische JavaScripts zu generieren. Zum Beispiel könnte es ein Skript-Tag wie folgt sein:

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

... aber es gibt keine Skriptdatei „Login.js.“ Stattdessen wird das Script Aktion des ResourceController genannt werden:

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

Das Problem ist, das frisst die nächste Anfrage nach oben, was bedeutet, dass ich nicht TempData kann von einer Seite mit einem dynamischen Skript umleiten. Gibt es eine Möglichkeit, wie die Script-Aktion (oder der ResourceController als Ganzes) die TempData nicht konsumieren kann, damit sie für die nächste "echte" Anfrage verfügbar ist?

Vielen Dank im Voraus!

+1

Bitte, zeigen Codebeispiel, wo Sie TempData und rufen RedirectToAction() festgelegt. –

Antwort

3

Sitzung wird zwischen mehreren Anfragen beibehalten.

+2

Einverstanden - Sie vermissen den Punkt von TempData, wenn Sie wollen, dass es das tut – joshcomley

5

könnten Sie legen die Linie

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

nach TempData in-Ansicht.

Dieser Artikel könnte auch für Sie nützlich sein: ASP.NET MVC TempData Is Really RedirectData

+1

Ich würde diesen Artikel definitiv auch empfehlen! – joshcomley

+1

dieser Artikel ist nützlich – aleemb

2

Haben Sie Ihren Controller ExecuteCore außer Kraft setzen Supertyp, die TempData löscht. Ich sage nicht, das ist eine gute Idee ist ...

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

Warum nicht ein PreserveTempDataAttribute erstellen, die Sie Ihre Script Aktion mit dekorieren können. Es kann die TempData neu zuweisen, wenn es nicht null ist.

8

Das Asp.Net-Team löste diesen Schmerz in MVC 2, indem es TempData.Keep() einführte, das sicherstellt, dass alle TempData-Elemente markiert sind, um für eine weitere Anforderung zu leben. Rufen Sie dies aus allen Aktionen, die Sie wollen nicht zu essen TempData.

die Gründe Lesen hinter Halten Einführung in() Jacques Eloffs blog post

Keep() in MSDN docs