我已经通过 web.config 在我的 mvc2 应用程序中禁用了 sessionState,并且还创建了我自己的 controllerfactory 和虚拟临时数据提供程序,如下所述:
只有我做到了,所以 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 的新增功能吗?