6 Stimmen

ASP.NET MVC: Löschen von TempData nach Ausführung einer Controller-Methode

Nach dem, was ich gelesen habe, bleiben die in TempData gespeicherten Informationen für die aktuelle und die nächste Anfrage erhalten (so dass Sie Informationen über Umleitungen hinweg weitergeben können). Das Problem ist, dass, wenn ich zu einer Controller-Aktion blättern, die nicht umleiten, die Informationen in TempData immer noch für die nächste Anforderung vorhanden sein wird. Ich verwende TempData, um Informationsmeldungen zu speichern, die dem Benutzer angezeigt werden, so dass ich jetzt die Meldungen für den ersten Bildschirm auch auf dem zweiten Bildschirm angezeigt bekomme.

Gibt es einen guten Zeitpunkt im Lebenszyklus des Controllers, um TempData zu löschen, wenn es nicht mehr verwendet wird?

7voto

Craig Stuntz Punkte 124703

Verwenden Sie ViewData anstelle von TempData, wenn Sie nicht umleiten . Sie sollten TempData niemals manuell löschen müssen. Wenn Sie es nur bei der Weiterleitung verwenden, wird es automatisch und zum richtigen Zeitpunkt für Sie geleert.

0voto

eu-ge-ne Punkte 27673

Ich denke, Sie sollten ViewData verwenden, wenn Sie nicht mit POST-REDIRECT-GET . Aber wenn Sie wirklich das oben beschriebene Verhalten benötigen, sollten Sie Ihren eigenen benutzerdefinierten TempDataProvider erstellen:

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

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

0voto

Matt Hinze Punkte 13498

Ich würde hier nicht nach einem bestimmten Ort suchen, sondern nach einem benutzerdefinierten TempDataProvider. Aber das ist knifflig. Was, wenn Sie das regelmäßige Verhalten in anderen Controllern wollen? Ich würde YAGNI dies für jetzt und nur löschen Sie es aus, wo Sie es gelöscht werden müssen. Wie Sie ein Muster bemerken, können Sie es bis zu einem gemeinsamen Ort ziehen.

CodeJaeger.com

CodeJaeger ist eine Gemeinschaft für Programmierer, die täglich Hilfe erhalten..
Wir haben viele Inhalte, und Sie können auch Ihre eigenen Fragen stellen oder die Fragen anderer Leute lösen.

Powered by:

X