ASP.NET TempData persiste entre les demandes
-
19-08-2019 - |
Question
J'utilise les données temporaires comme suit dans mes contrôleurs - très simple, en cas de problème:
TempData("StatusMessage") = "You have no items set to Auto-Ship."
Ensuite, sur chaque page, j'ai un contrôle utilisateur comme suit:
<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>
Le problème, c’est que quand une erreur est ajoutée à tempdata, elle s’affiche correctement à la première requête mais ALSO apparaît également à la requête suivante - ce qui est évidemment très déroutant et ne constitue pas un comportement souhaité.
Je n'utilise aucun IoC, j'ai vu la publication avec les mêmes problèmes lorsque je l'utilisais.
La solution
Le seul objectif de TempData est de persister jusqu'à la prochaine demande. Des informations que vous ne souhaitez pas conserver jusqu'à ce que la requête suivante soit transférée dans ViewData.
De manière réaliste, cela signifie que TempData est uniquement sûr à utiliser lors de la redirection. En l'absence de redirection, la " requête suivante " pourrait être n'importe quoi.
Autres conseils
cela serait-il acceptable (en supprimant l'erreur une fois qu'elle a été affichée):
<% 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
%>