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
%>
Другие вопросы по тегам