ASP.NET TempData сохраняется между запросами - PullRequest
9 голосов
/ 23 января 2009

Я использую временные данные, как указано в моих контроллерах - очень просто, когда есть проблема:

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 ]

23 голосов
/ 23 января 2009

Единственная цель TempData - сохранять до следующего запроса. Материал, который вы не хотите сохранять, пока следующий запрос не перейдет в ViewData.

Реально это означает, что TempData безопасно использовать только при перенаправлении. Когда не выполняется перенаправление, «следующий запрос» может быть любым.

0 голосов
/ 23 января 2009

это будет приемлемо (устранение ошибки, как только она будет показана):

<%  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
%>
...