ASP.NET MVC macht Browseraktualisierung TempData nutzlos?

7

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?

    
Myster 15.04.2010, 01:02
quelle

6 Antworten

12

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%     
jfar 15.04.2010, 01:08
quelle
18

Sie sollten

schreiben %Vor%

in Ihrem Controller, dann werden diese Daten auch in Aktualisierungssituationen gespeichert.

    
cemsazara 30.10.2011 21:47
quelle
2

Eine Umgehung für die gegebene Situation in MVC1 wäre, die TempData auch im zweiten Controller neu zuzuordnen. Natürlich bleiben die Daten im System noch etwas länger bestehen. aber es behebt das Problem mit dem Aktualisieren.

    
ravi 21.04.2010 04:36
quelle
1

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").

    
Ashwini 14.02.2013 09:15
quelle
0

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.

    
Omar 15.04.2010 04:27
quelle
-1

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). .

    
Nathan Taylor 15.04.2010 01:09
quelle

Tags und Links