Wenn ich zu einer neuen Seite weiterleite, die TempData übergibt, um die Seite zu initialisieren, funktioniert es einwandfrei. Wenn der Benutzer jedoch die Aktualisierungsschaltfläche in seinem Browser drückt, ist die TempData nicht mehr verfügbar. Gibt es eine Situation, in der TempData zuverlässig verwendet werden könnte? Oder eine Möglichkeit, das Problem der Benutzeraktualisierung zu entfernen oder zu mildern?
In MVC 1, ja, temporäre Daten gehen nach der nächsten Anfrage verloren, nachdem Sie einen Schlüssel gespeichert haben.
Bei MVC 2 gehen die Temp-Daten jedoch nach dem ersten Zugriffsversuch verloren.
Sie können immer Session verwenden, die TempData ohnehin verwendet, um das Problem mit dem Verlust von temporären Daten zu lösen, das Sie haben.
Aus den MVC 2 Beta-Versionshinweisen:
TempDataDictionary Verbesserungen
Das Verhalten des TempDataDictionary Klasse wurde leicht geändert in adressieren Sie Szenarien, in denen Temp Daten waren entweder vorzeitig entfernt oder blieb länger als nötig. Zum Beispiel, in Fällen, in denen Temp Daten waren lese in der gleichen Anfrage, in der es eingestellt war, waren die Temp-Daten persistent für die nächste Anfrage, obwohl die Absicht war es zu entfernen. In anderen Fälle, Temp-Daten wurden nicht beibehalten über mehrere aufeinanderfolgende Weiterleitungen.
Um diese Szenarien anzugehen, muss der TempDataDictionary-Klasse wurde geändert damit alle Schlüssel überleben Unendlich, bis der Schlüssel gelesen wird aus dem TempDataDictionary-Objekt. Die Keep-Methode wurde hinzugefügt TempDataDictionary, um Sie anzugeben dass der Wert nicht entfernt werden sollte nach dem Lesen. Das RedirectToActionResult ist ein Beispiel wo die Keep-Methode aufgerufen wird Um alle Schlüssel für die nächste Anfrage.
Sie können auch direkt in die MVC 2-Quelle schauen, um diese Änderungen zu sehen:
MVC 1:
%Vor%MVC 2:
%Vor%Tempdata wird über Weiterleitungen hinweg verwendet. Wenn Sie die Seite also aktualisieren, bedeutet das, dass Sie eine separate Anfrage an den Server richten, weshalb Ihre Daten verloren gehen. Um diese Daten zu erhalten, rufen Sie die Methode Tempdata.Keep ("KeyofTempdata") in der Aktion auf, auf die Sie umleiten. Wenn Sie Daten entfernen möchten, verwenden Sie Tempdata.Remove ("KeyofTempdata").
Die einzigen Funktionen, die Ihr Problem lösen können, sind Cache
und Session
.
ViewData
"stirbt" im Wesentlichen aus, wenn die Ansicht generiert wird.
Wenn Sie weitere Details zu dem, was Sie erreichen möchten, angeben können, können Sie vielleicht eine andere Lösung angeben. Es ist jedoch die beste Option für Sie, Session
oder Cache
zu verwenden.
TempData existiert speziell, um die Daten für nur eine Seite load / action / redirect zu speichern. Wenn die Daten nach einer Aktualisierung beibehalten werden sollen, sollten Sie sie in die ViewData-Auflistung einfügen, solange die Aktion, die die Aktualisierungsanforderung ausführt, dieselbe ist, die ursprünglich angefordert wurde (dh der ViewData-Wert wurde vor einer Weiterleitung nicht hinzugefügt). .
Tags und Links asp.net-mvc tempdata