ASP.NET TempData сохраняется между запросами
Я использую временные данные, как указано в моих контроллерах - очень просто, когда есть проблема:
TempData("StatusMessage") = "You have no items set to Auto-Ship."
Затем на каждой странице у меня есть пользовательский элемент управления следующим образом:
<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>
Проблема в том, что когда у меня есть ошибка, добавленная к временным данным, она правильно отображается при первом запросе, но ТАКЖЕ снова появляется при следующем запросе - что, очевидно, очень запутанно и не является желательным поведением.
Я не использую IoC, я видел сообщение с теми же проблемами при использовании этого.
2 ответа
Единственной целью TempData является сохранение до следующего запроса. Материал, который вы не хотите сохранять, пока следующий запрос не перейдет во ViewData.
В действительности это означает, что TempData безопасно использовать только при перенаправлении. Когда нет перенаправления, "следующий запрос" может быть чем угодно.
Будет ли это приемлемым (устранение ошибки после ее появления):
<% 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
%>