我有一个ASP.NET MVC项目,它使用TempData将对象从一个控制器动作传递到另一个控制器动作 - 实际上这是一个动作,但接受HTTP帖子的版本。在ASP.NET MVC中,为什么会话时TempData不会持久?
在我的开发机器上,它按预期工作。在测试机器上,第二个控制器操作中的TempData值为空。
我看过的论坛帖子显示检查sessionState正在工作 - 我已经完成了。这两个网站的sessionState设置为InProc - web.config都不包含sessionState条目,但我已检查Session.Mode是InProc。如果我在第一个控制器动作中的Session中放置一个对象,我可以在两台机器上的第二个控制器动作中检索它。
我可以通过在第二个控制器动作中重新执行用于设置TempData的过程来解决此问题,但为什么TempData可能会在测试机器上丢失?
您正在使用的ASP.NET MVC版本非常重要。在ASP.NET MVC 1中,TempData被持久化,直到来自同一浏览器的下一个请求,所以你应该在重定向之前立即使用TempData(在返回RedirectResult之前立即)。由于ASP.NET MVC 2中的值在读取请求后将从TempData中删除(因此它可以存在于多重定向场景中)。因此,对于更具体的答案,我们需要更多关于您正在使用的重定向场景和ASP.NET MVC版本的详细信息。 – tpeczek 2011-04-15 13:33:14
我继承了项目,它使用的是MVC 1.我没有重定向我使用TempData在action/view与提交按钮和接受postback的action/view之间传递数据。这适用于一台机器,但不适用于另一台机器。据我可以告诉web.config的相关位在两台机器上都是一样的。 – 2011-04-18 08:54:17
如果它使用的是ASP.NET MVC 1,那么您必须确定在您描述的GET和POST之间没有其他来自该客户端的请求到您的应用程序。如果有任何其他请求会被识别为同一个客户端,那么TempData将会丢失(如果您的应用程序已经读取了它们,那么这个请求将不会被修复) - 我相信这个链接描述的是非常确切的http://blogs.teamb .com/craigstuntz/2009/01/23/37947/ – tpeczek 2011-04-18 09:02:24