views:

1292

answers:

3

I am using temp data as follow in my controllers - very simple, when there is a problem:

TempData("StatusMessage") = "You have no items set to Auto-Ship."

Then on every page I have a user control as follows:

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

Problem is when I do have an error added to tempdata it shows up properly on the first request but ALSO shows up again on the next request as well - which is obviously very confusing and not a desired behavior.

I am not using any IoC, I did see the post with the same problems when using that.

A: 

Is it a TempData problem or a cached page?

confusedGeek
+6  A: 

The sole purpose of TempData is to persist until the next request. Stuff you do not want to persist until the next request should go into ViewData, instead.

Realistically, this means that TempData is only safe to use when redirecting. When not redirecting, the "next request" could be anything.

Craig Stuntz
so once I return a view that is actually part of the first request not the second, therefore I will see it the next time?
Slee
I don't quite understand your question. If you set TempData and return a view, that view and the next request will see the TempData. Again, it is only safe to set TempData when returning a redirect result.
Craig Stuntz
that's what I was trying to say - perfect - thanks!
Slee
A: 

would this be acceptable (removing the error once it has been shown):

<%  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
%>
Spikolynn
I don't know if it works, but it would certainly be a violation of the separation of concerns.
Craig Stuntz
well, using <% %> is a violation of SoC already IMO.
Spikolynn