【发布时间】:2015-12-10 17:04:30
【问题描述】:
我正在创建ControllerFactory。在这个类中,我想在方法CreateController 中访问所有控制器都可以访问的TempData 变量。
public class ControllerFactory : IControllerFactory
{
public IController CreateController(RequestContext requestContext, string controllerName)
{
//TODO :IoC implementation or call comes here.
return null;
}
public void ReleaseController(IController controller)
{
var disposable = controller as IDisposable;
if (disposable != null)
{
disposable.Dispose();
}
}
public IController CreateController(System.Web.Routing.RequestContext requestContext, string controllerName)
{
//HERE I WANT TO HAVE ACCESS TO THE TempData
}
public SessionStateBehavior GetControllerSessionBehavior(System.Web.Routing.RequestContext requestContext, string controllerName)
{
return SessionStateBehavior.Default;
}
}
注意:在调用页面时,代码到达控制器之前,函数CreateController会显示它到达的这段代码。
知道如何在CreateController 方法中访问TempData?
【问题讨论】:
-
我不认为 TempData 是你认为的那样。 TempData 是一个临时字典,仅适用于一次读取(访问一次后它会自行删除)。我很难在控制器工厂中找到任何有用的 TempData 用法,因为控制器/视图中的数据将不再存在。而且,更重要的是,如果用户按 F5,数据将消失,因此控制器工厂将不再需要重新渲染页面。 TempData基本只对短通知消息之类有用,页面刷新不需要重新渲染。
-
我给你举个例子,以便更好地理解。如果 TempaData["object"] != null 我想构建控制器 1,如果不是,我想构建默认控制器。所以,要做到这一点,我需要访问我的 ControllerFactory 中的临时数据。请注意,TempData["object"] 可以是任何控制器的字段。
-
好的,但是当你这样做 TempData["object"] != null 时,它会删除它,这是你想要的吗?
-
是的,我知道,这就是我想要的
标签: c# asp.net-mvc controller