ASP.NET TempData persiste tra le richieste
-
19-08-2019 - |
Domanda
Sto usando i dati temporanei come segue nei miei controller - molto semplice, quando c'è un problema:
TempData("StatusMessage") = "You have no items set to Auto-Ship."
Quindi su ogni pagina ho un controllo utente come segue:
<div class="error-container">
<% If TempData.ContainsKey("ErrorMessage") Then%>
<script> $('div.error-container').show();</script>
<div class="msg-error"><p><%=TempData("ErrorMessage") %></p></div>
<% End If%>
<% If TempData.ContainsKey("StatusMessage") Then%>
<script> $('div.error-container').show();</script>
<div class="msg-status"><p><%=TempData("StatusMessage")%></p></div>
<% End If%>
<ul></ul>
</div>
Il problema è che quando ho aggiunto un errore a tempdata, questo si presenta correttamente sulla prima richiesta, ma compare anche sulla richiesta successiva, il che è ovviamente molto confuso e non un comportamento desiderato.
Non sto usando alcun IoC, ho visto il post con gli stessi problemi quando lo usavo.
Soluzione
Il unico scopo di TempData è persistere fino alla prossima richiesta. Roba che non vuoi persistere fino a quando la richiesta successiva non dovrebbe andare in ViewData, invece.
Realisticamente, questo significa che TempData è sicuro da usare solo durante il reindirizzamento. Quando non si reindirizza, la "richiesta successiva" potrebbe essere qualsiasi cosa.
Altri suggerimenti
sarebbe accettabile (rimuovendo l'errore dopo che è stato mostrato):
<% If TempData.ContainsKey("ErrorMessage") Then %>
<script> $('div.error-container').show();</script>
<div class="msg-error"><p><%=TempData("ErrorMessage") %></p></div>
<%
TempData.Remove("ErrorMessage")
End If
%>