Se reindirizzamento a una nuova pagina che passa TempData per inizializzare la pagina funziona correttamente, tuttavia se l'utente preme il pulsante di aggiornamento nel proprio browser, TempData non è più disponibile. Dato questo, c'è qualche situazione in cui TempData potrebbe essere usato in modo affidabile?
O un modo per rimuovere o mitigare il problema degli utenti che si aggiornano?ASP.NET MVC esegue l'aggiornamento del browser rendendo inutilizzabile TempData?
risposta
In MVC 1, sì, i dati temporanei vengono persi dopo la richiesta successiva dopo aver memorizzato un tasto.
Con MVC 2, tuttavia, i dati temporanei vengono persi dopo il primo tentativo di accesso.
È sempre possibile utilizzare Session, che TempData utilizza in ogni caso, per risolvere il problema di perdita di dati temporanei che si verificano.
Dal MVC 2 Beta Release Notes:
TempDataDictionary Miglioramenti
Il comportamento del classe TempDataDictionary è stato leggermente modificato per scenari di indirizzo in cui i dati temperatura era sia rimosso prematuramente o persistito più del necessario. Ad esempio, nei casi in cui i dati temperatura era letto nella stessa richiesta in cui è stato impostato, i dati di temperatura persisteva per la richiesta successiva, anche se l'intento era quello di rimuoverlo. In altri casi , i dati temporanei non sono stati mantenuti attraverso più reindirizzamenti consecutivi.
per affrontare questi scenari, la classe TempDataDictionary è stato cambiato in modo che tutte le chiavi sopravvivono a tempo indeterminato fino a quando la chiave viene letta dall'oggetto TempDataDictionary. Il metodo Keep è stato aggiunto a TempDataDictionary per consentire di indicare che il valore non deve essere rimosso dopo la lettura. Il parametro RedirectToActionResult è un esempio in cui il metodo Keep viene chiamato in per conservare tutte le chiavi per la richiesta successiva di .
È inoltre possibile guardare direttamente nella sorgente MVC 2 per vedere questi cambiamenti:
MVC 1:
public object this[string key] {
get {
object value;
if (TryGetValue(key, out value)) {
return value;
}
return null;
}
set {
_data[key] = value;
_modifiedKeys.Add(key);
}
}
MVC 2:
public object this[string key] {
get {
object value;
if (TryGetValue(key, out value)) {
_initialKeys.Remove(key);
return value;
}
return null;
}
set {
_data[key] = value;
_initialKeys.Add(key);
}
}
TempData esiste specificamente per negozio i dati per un solo caricamento/azione/reindirizzamento di una pagina. Se i dati persistono dopo un aggiornamento, è necessario inserirlo nella raccolta ViewData a condizione che l'azione che sta servendo la richiesta di aggiornamento sia la stessa richiesta inizialmente (ovvero il valore ViewData non è stato aggiunto prima di un reindirizzamento) .
La tua dichiarazione sulla persistenza dei dati utilizzando ViewData non è corretta. L'ambito di ViewData termina quando viene generata la vista. L'aggiornamento ripete semplicemente l'azione e ViewData viene rigenerato, nulla persiste. – Omar
Forse ho oscurato il mio significato con come l'ho spiegato. Stavo insinuando che il valore sarebbe stato aggiunto nuovamente a ViewData tramite un aggiornamento. –
Le uniche funzioni che possono risolvere il problema sono Cache
e Session
.
ViewData
essenzialmente "muore" fuori quando viene generata la vista.
Se è possibile fornire ulteriori dettagli su ciò che si sta tentando di realizzare, forse un'altra soluzione può essere data, tuttavia, sembra che l'opzione migliore per voi è quella di utilizzare Session
o Cache
.
Alla fine ho adottato un approccio completamente diverso e ho passato i dati sulla stringa di query (erano solo un paio di variabili ma non ancora la soluzione più elegante) – Myster
Una soluzione alternativa per la situazione data in MVC1 sarebbe quella di riassegnare il TempData nel secondo controller pure. Ovviamente persiste i dati nel sistema per un po 'più di tempo. ma corregge il problema di aggiornamento.
Si dovrebbe scrivere
TempData.Keep("nameofthedata");
nel controller, quindi manterrà i dati in situazioni di aggiornamento troppo.
I tempdata vengono utilizzati attraverso i reindirizzamenti, quindi se si sta aggiornando la pagina significa che si sta facendo una richiesta separata al server, ecco perché i dati vengono persi. Per mantenere questo tipo di dati, chiama il metodo Tempdata.Keep ("KeyofTempdata") nell'azione a cui stai reindirizzando. Se si desidera rimuovere i dati, utilizzare Tempdata.Remove ("KeyofTempdata").
- 1. ASP.NET MVC TempData nel cookie del browser
- 2. ASP.NET MVC Store TempData in Cookie
- 3. MVC 3 svantaggi del contenitore tempdata
- 4. ASP.NET MVC: cancellazione TempData dopo l'esecuzione di un metodo controller
- 5. Test unità TempData in ASP.NET MVC3
- 6. Dove viene conservato TempData?
- 7. ASP.NET MVC - Esegue l'azione del controller senza reindirizzamento
- 8. Asp.net MVC FileContentResult - impedisce l'apertura nel browser
- 9. Come disattivare la cache del browser in asp.net mvc 3?
- 10. ASP.NET MVC: rende le immagini della cache del browser dall'azione
- 11. Problema di hosting del browser Web in asp.net mvc applicaton
- 12. ASP.NET - Invalidate cache del browser
- 13. Gestione eccezioni ASP.NET MVC
- 14. ASP.NET MVC CookieTempDataProvider: qualsiasi esperienza?
- 15. Utilizzo del pulsante Indietro del browser dopo SignOut() consente l'accesso alla pagina protetta (ASP.NET MVC)
- 16. Formato ASP.Net MVC app per browser desktop e mobile
- 17. TempData non essere sgomberati
- 18. qual è l'ambito e la visibilità di TempData in ASP.NET MVC?
- 19. asp.net mvc 4 controller esegue più chiamate ajax in parallelo
- 20. ASP.NET MVC esegue richieste in coda o contemporaneamente
- 21. PHPStorm inutilizzabile dopo l'arresto
- 22. webdriver-test è inutilizzabile
- 23. TempData Wrapper
- 24. ASP.NET Response.Redirect per aprire una nuova finestra del browser?
- 25. Come si esegue il test per l'impostazione di TempData in MVC 2 in cui è presente un reindirizzamento?
- 26. ASP.NET MVC Rendering condizionale del rasoio un elemento
- 27. File di definizione del browser ASP.NET
- 28. pitone - rendendo file scaricabile
- 29. Come si esegue il test dell'unità sul metodo OnActionExecuting del mio asp.net-mvc controller?
- 30. Modifiche all'implementazione TempData - Motivi della modifica
Si basa sull'accesso al valore ora? Ho perso quel registro delle modifiche. –
Sì, puoi fornire un riferimento per la perdita di TempData al primo tentativo di accesso? – Omar
@Nathan Taylor @Baddie, spero che le mie modifiche e citazioni rimuovano le tue preoccupazioni. – jfar