我已经通过web.config在我的mvc2应用程序中禁用了sessionState,并且还创建了我自己的controllerfactory和虚拟tempdata提供程序,如下所述:
How can I disable session state in ASP.NET MVC?
只有我这样做才能使SaveTempData抛出异常:
public void SaveTempData(ControllerContext controllerContext,
IDictionary<string, object> values)
{
throw new NotImplementedException(
"Cannot set tempdata, no session state is available.");
}
我确保没有代码使用Session或TempData对象,但我仍然看到在引发“OnResultExecuted”事件后抛出此异常。我曾经在我的mvc1网站上使用这个相同的模式,从未见过异常。有什么想法吗?
如果我将“SaveTempData”实现更改为:
public void SaveTempData(ControllerContext controllerContext,
IDictionary<string, object> values)
{
if (values.Count != 0)
{
throw new NotImplementedException(
"Cannot set tempdata, no session state is available.");
}
}
一切都按预期工作 - 我只是希望了解为什么在我不在任何地方使用SaveTempData时都会调用它。
更新
发现了这篇文章:http://www.gregshackles.com/2010/07/asp-net-mvc-do-you-know-where-your-tempdata-is/
这解释了ExecuteCore围绕一个动作调用PossiblyLoadTempData和PossiblySaveTempData - 这就是造成我的问题的原因。这是mvc2与mvc1的新增加吗?
答案 0 :(得分:1)
这是在Controller.ExecuteCore
方法中实现的方式。始终在每个操作之前和之后调用LoadTempData
和SaveTempData
方法,因此请确保它们不会抛出异常。为了有效地禁用会话,我建议您将以下内容放在web.config中:
<sessionState mode="Off" />
答案 1 :(得分:1)
发现了这篇文章:http://www.gregshackles.com/2010/07/asp-net-mvc-do-you-know-where-your-tempdata-is/
这解释了ExecuteCore围绕一个动作调用PossiblyLoadTempData和PossiblySaveTempData - 这就是造成我的问题的原因。这是mvc2与mvc1的新增加吗?