我的自定义控制器中的Null ControllerContext继承自BaseController

时间:2010-07-13 10:37:25

标签: asp.net-mvc

我构建了自己的Controller类,它继承自BaseController。但是构造函数中的ControllerContext为“null”。我应该在哪里指定ControllerContext

1 个答案:

答案 0 :(得分:22)

{1}}属性未分配给继承层次结构中的任何基础构造函数。控制器由控制器工厂创建,并在没有分配ControllerContext属性的情况下传回。

使用Reflector,我们可以查看分配的位置:

ControllerContext

从虚拟Execute方法调用中调用protected virtual void Initialize(RequestContext requestContext) { this.ControllerContext = new ControllerContext(requestContext, this); } 方法:

Initialize

这意味着您可以访问protected virtual void Execute(RequestContext requestContext) { if (requestContext == null) { throw new ArgumentNullException("requestContext"); } this.VerifyExecuteCalledOnce(); this.Initialize(requestContext); this.ExecuteCore(); } 属性的最早点是覆盖ControllerContextExecute方法(但调用Initializebase.Execute第一):

base.Initialize

后者(protected override void Execute(RequestContext requestContext) { base.Execute(requestContext); // .ControllerContext is available from this point forward. } protected override void Initialize(RequestContext requestContext) { base.Initialize(requestContext); // .ControllerContext is available from this point forward. } )是您可以使用ControllerContext属性的绝对最早的点,除非您自己处理该任务,这是不推荐的(因为框架的某些部分将取决于具有该属性)那时被分配了。)

希望有所帮助。