2009-05-22 9 views
6

Von dem, was ich gelesen habe, werden Informationen in TempData für die aktuelle Anfrage und die nächste Anfrage (damit Sie Informationen über Weiterleitungen weitergeben können) vorhanden sein. Das Problem besteht darin, dass die Informationen in TempData für die nächste Anforderung weiterhin vorhanden sind, wenn ich zu einer Controlleraktion blicke, die nicht umgeleitet wird. Ich benutze TempData, um Informationsnachrichten zu speichern, die dem Benutzer angezeigt werden. Jetzt bekomme ich die Nachrichten für den ersten Bildschirm auch auf dem zweiten Bildschirm.ASP.NET MVC: Löschen von TempData nach der Ausführung einer Controller-Methode

Gibt es eine gute Zeit im Controller-Lebenszyklus, um TempData zu löschen, wenn sie nicht mehr verwendet wird?

Antwort

7

Use ViewData instead of TempData if you are not redirecting. Sie sollten TempData nie manuell löschen müssen. Wenn Sie es nur beim Umleiten verwenden, wird es automatisch und zum richtigen Zeitpunkt für Sie gelöscht.

+0

Aber was passiert, wenn meine Controller-Aktion umleitet? Ich kann ViewData in diesem Fall nicht verwenden, da die Nachrichten nicht mehr vorhanden sind. Gibt es eine bessere Möglichkeit, solche Meldungen wie in TempData/ViewData zu speichern? –

+0

Sie müssen ViewData verwenden, wenn Sie nicht umleiten, und TempData, wenn Sie umleiten. In beiden Fällen ist alles andere automatisch. Um sie anzuzeigen, schreiben Sie dann TempData ["key"] ?? ViewData ["key"] in Ihrer Sicht. –

0

Ich denke, Sie sollten ViewData verwenden, wenn Sie nicht POST-REDIRECT-GET verwenden. Aber wenn Sie wirklich das Verhalten müssen Sie schon oben beschrieben, können Sie eigene benutzerdefinierte TempDataProvider schaffen sollte:

public class YourTempDataProvider : SessionStateTempDataProvider 
{ 
    public override void SaveTempData(ControllerContext controllerContext, IDictionary<string, object> values) 
    { 
     bool redirecting = ... 

     if(redirecting) 
     { 
      base.SaveTempData(controllerContext, values); 
     } 
    } 
} 
+0

Und wie benutzt man diese benutzerdefinierte Klasse? – Alex

0

Ich würde hier nicht suchen Sie nach einem bestimmten Ort, anders als eine benutzerdefinierte TempDataProvider. Aber das ist schwierig. Was ist, wenn Sie das normale Verhalten in anderen Controllern möchten? Ich würde YAGNI für jetzt und einfach löschen Sie es, wo Sie es gelöscht werden müssen. Wenn Sie ein Muster bemerken, können Sie es an einen gewöhnlichen Ort ziehen.

Verwandte Themen