【问题标题】:ASP.NET TempData persists between requestsASP.NET TempData 在请求之间保持不变
【发布时间】:2009-01-23 16:20:54
【问题描述】:

我在我的控制器中使用如下临时数据 - 很简单,当出现问题时:

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>

问题是当我确实将错误添加到 tempdata 时,它会在第一个请求时正确显示,但在下一个请求时也会再次显示 - 这显然非常令人困惑,而不是理想的行为。

我没有使用任何 IoC,我确实看到帖子在使用时遇到了同样的问题。

【问题讨论】:

    标签: asp.net-mvc tempdata


    【解决方案1】:

    TempData 的唯一目的是持续到下一个请求。在下一个请求进入 ViewData 之前,您不想保留的东西。

    实际上,这意味着 TempData 只有在重定向时才能安全使用。当不重定向时,“下一个请求”可以是任何东西。

    【讨论】:

    • 所以一旦我返回一个实际上是第一个请求而不是第二个请求的一部分的视图,那么我下次会看到它吗?
    • 我不太明白你的问题。如果您设置 TempData 并返回一个视图,该视图和下一个请求将看到 TempData。同样,只有在返回重定向结果时设置 TempData 才是安全的。
    【解决方案2】:

    这是否可以接受(一旦显示错误就删除):

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

    【讨论】:

    • 不知道行不行,但肯定是违反了关注点分离。
    猜你喜欢
    • 1970-01-01
    • 2019-04-01
    • 1970-01-01
    • 1970-01-01
    • 2017-01-08
    • 2011-02-21
    • 1970-01-01
    • 1970-01-01
    • 2011-03-01
    相关资源
    最近更新 更多