Asp.net mvc ASP.NETMVC中奇怪的缓存(?)问题

Asp.net mvc ASP.NETMVC中奇怪的缓存(?)问题,asp.net-mvc,vb.net,session,caching,Asp.net Mvc,Vb.net,Session,Caching,在IIS6(Windows 2003)上部署ASP MVC时遇到奇怪的问题。我已将控制器代码简化为以下代码: <AcceptVerbs(HttpVerbs.Get)> _ Public Function CloseBatches() As ActionResult ViewData("Title") = "Close Batches" ViewData("Message") = Session("Message") Return View() End Func

在IIS6(Windows 2003)上部署ASP MVC时遇到奇怪的问题。我已将控制器代码简化为以下代码:

<AcceptVerbs(HttpVerbs.Get)> _
Public Function CloseBatches() As ActionResult
    ViewData("Title") = "Close Batches"
    ViewData("Message") = Session("Message")
    Return View()
End Function

<AcceptVerbs(HttpVerbs.Post)> _
Public Function CloseBatches(ByVal RequestId As String) As ActionResult

    Session("Message") = "Yadda yadda blah"

    Return RedirectToAction("CloseBatches")

End Function
_
作为ActionResult的公共函数CloseBatches()
ViewData(“标题”)=“关闭批次”
ViewData(“消息”)=会话(“消息”)
返回视图()
端函数
_
作为ActionResult的公共函数CloseBatchs(ByVal RequestId为字符串)
会话(“消息”)=“Yadda Yadda blah”
返回重定向到操作(“CloseBatches”)
端函数
当然,控制器最初确实做了更多的工作,但将其剥离到这一步以尝试进行故障排除。页面有基本的ViewPage html(母版页参考等),然后

<p><%=ViewData("Message")%></p>
<%Using Html.BeginForm("CloseBatches", "Home", New With {.RequestId = "Close"})%>
    <input type="submit" id="Close" value="Close"/>
<%End Using%>

正如你所看到的,我正在尝试使用Post重定向显示模式,这似乎是目前的发展方向。问题在于,无论你点击按钮多少次,当你点击按钮时,消息都不会出现。但是,如果执行刷新/F5,文本确实会出现-然后再次刷新,文本就会消失-再次刷新,文本就会出现-重复

我在两个控制器函数上都有断点,它会在正确的点上命中它们,我已经完成了代码,没有发生错误,因此应该填充ViewData,但是页面并不总是显示它

测试与IE7和FF3-后者似乎有点间歇性,因为它确实偶尔工作

有什么想法吗?我有什么明显的遗漏?会不会发生一些奇怪的缓存


谢谢。

我真的不知道您面临什么问题,但请尝试使用TempData而不是Session。

按如下方式更改代码:

<AcceptVerbs(HttpVerbs.Get)> _
Public Function CloseBatches() As ActionResult
    ViewData("Title") = "Close Batches"
    Return View()
End Function

<AcceptVerbs(HttpVerbs.Post)> _
Public Function CloseBatches(ByVal RequestId As String) As ActionResult
    TempData("Message") = "Yadda yadda blah"
    Return RedirectToAction("CloseBatches")
End Function

<p><%=ViewData.Eval("Message")%></p>
<%Using Html.BeginForm("CloseBatches", "Home", New With {.RequestId = "Close"})%>
    <input type="submit" id="Close" value="Close"/>
<%End Using%>
表示“如果存在,则从ViewData获取值;如果不存在,则从TempData获取值”。这是查找消息的正确位置


我在MVC应用程序中根本不使用会话。

我面临着同样的问题,我想我已经将它缩小到只有在使用RedirectToAction时才会出现。有时有效,有时无效。在IE7中,它似乎像预期的那样工作,但在FF3中却不是

我在母版页中尝试了这两种方法,以检查是否设置了此值

TempData.ContainsKey("Error") 


抱歉,我应该提到我最初使用的是TempData,但现在改为使用Session,以确保每个请求都有消息数据,从而简化测试。在单步执行过程中,它确实存在,并且每次都会执行ViewData(“Message”)=Session(“Message”)位,调试器将ViewData显示为其中包含消息项。页面上的

位无论如何都不是有条件的,因此它应该显示所述的ViewData…但它不是,或者至少不是一直都是


我将查看.Eval位,看看这是否解决了任何问题。谢谢。

W/.Eval,您可以使用TempData进行重定向,使用ViewData进行测试。Eval不知道有什么区别。
ViewData.Eval("Error")