ASP.NET TempData persiste entre as solicitações
-
19-08-2019 - |
Pergunta
Eu estou usando dados temporários como segue em meus controladores - muito simples, quando há um problema:
TempData("StatusMessage") = "You have no items set to Auto-Ship."
Em seguida, em cada página eu tenho um controle de usuário da seguinte maneira:
<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>
O problema é quando eu tenho um erro adicionado ao TempData ele aparece corretamente na primeira solicitação, mas também mostra-se novamente no próximo pedido, bem como -. O que é obviamente muito confuso e não um comportamento desejado
Eu não estou usando qualquer IoC, eu vi o post com os mesmos problemas quando se usa isso.
Solução
O único propósito de TempData é persistir até o próximo pedido. Coisas que você não quer persistir até a próxima solicitação deve entrar em ViewData, em vez disso.
Na realidade, isso significa que TempData só é segura para usar quando redirecionando. Quando não está redirecionando, o "próximo pedido" poderia ser qualquer coisa.
Outras dicas
isso seria aceitável (removendo o erro uma vez que foi mostrado):
<% 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
%>