2009-05-22 15 views
6

Da quanto ho letto, le informazioni inserite in TempData saranno presenti per la richiesta corrente e per la successiva richiesta (in modo che sia possibile passare le informazioni attraverso i reindirizzamenti). Il problema è che se sfoglio un'azione del controller che non reindirizza, le informazioni in TempData saranno ancora lì per la richiesta successiva. Sto usando TempData per archiviare i messaggi informativi che vengono visualizzati all'utente, quindi ora sto ricevendo anche i messaggi per la prima schermata sulla seconda schermata.ASP.NET MVC: cancellazione TempData dopo l'esecuzione di un metodo controller

C'è un buon momento nel ciclo di vita del controller per cancellare TempData una volta che non viene più utilizzato?

risposta

7

Use ViewData instead of TempData if you are not redirecting. Non si dovrebbe mai aver bisogno di cancellare manualmente TempData. Se lo si utilizza solo al reindirizzamento, verrà cancellato automaticamente, automaticamente e al momento giusto.

+0

Ma cosa succede se l'azione del mio controller _is_ reindirizza? Non posso usare ViewData in quel caso perché i messaggi non ci sono più. Esiste un modo migliore per gestire messaggi display come questo rispetto alla memorizzazione in TempData/ViewData? –

+0

È necessario utilizzare ViewData quando non si effettua il reindirizzamento e TempData durante il reindirizzamento. In entrambi i casi tutto il resto è automatico. Per visualizzarli, quindi scrivere TempData ["chiave"] ?? ViewData ["chiave"] nella tua vista. –

0

Penso che tu usi ViewData se non stai utilizzando POST-REDIRECT-GET. Ma se si ha realmente bisogno il comportamento che hai descritto sopra si dovrebbe creare il proprio TempDataProvider personalizzato:

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

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

E come si usa questa classe personalizzata? – Alex

0

non vorrei cercare un determinato luogo qui, diverso da un TempDataProvider personalizzato. Ma è difficile. Cosa succede se si desidera il comportamento normale in altri controller? Per ora vorrei YAGNI e basta chiarire dove vuoi che venga eliminato. Come noti un motivo, puoi portarlo in un luogo comune.

Problemi correlati