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

Bri*_*kim 7 asp.net-mvc

我构建了自己的继承自的Controller类BaseController.但是 ControllerContext构造函数是"null".我应该在哪里指定ControllerContext

Mat*_*ott 22

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

使用Reflector,我们可以查看赋值发生的位置:

protected virtual void Initialize(RequestContext requestContext)
{
    this.ControllerContext = new ControllerContext(requestContext, this);
}
Run Code Online (Sandbox Code Playgroud)

Initialize方法是从虚拟Execute方法调用来调用:

protected virtual void Execute(RequestContext requestContext)
{
    if (requestContext == null)
    {
        throw new ArgumentNullException("requestContext");
    }
    this.VerifyExecuteCalledOnce();
    this.Initialize(requestContext);
    this.ExecuteCore();
}
Run Code Online (Sandbox Code Playgroud)

这意味着您可以访问该ControllerContext属性的最早点是覆盖ExecuteInitialize方法(但是调用base.Executebase.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.
}
Run Code Online (Sandbox Code Playgroud)

后者(Initialize)是您可以使用ControllerContext属性的绝对最早的点,除非您自己处理了赋值,这是不推荐的(因为框架的某些部分将取决于当时分配给该属性).

希望有所帮助.