【问题标题】:Null ControllerContext in my custom controller inheriting from BaseController我的自定义控制器中的 Null ControllerContext 继承自 BaseController
【发布时间】:2010-07-13 10:37:24
【问题描述】:

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

【问题讨论】:

    标签: asp.net-mvc


    【解决方案1】:

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

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

    protected virtual void Initialize(RequestContext requestContext)
    {
        this.ControllerContext = new ControllerContext(requestContext, this);
    }
    

    Initialize 方法是从虚拟 Execute 方法调用中调用的:

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

    这意味着您可以访问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.
    }
    

    后者 (Initialize) 是您可以使用 ControllerContext 属性的绝对最早点,除非您自己处理分配,不建议这样做(因为框架的一部分将取决于将该属性分配给当时)。

    希望对您有所帮助。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2023-03-19
      • 2012-12-17
      • 1970-01-01
      相关资源
      最近更新 更多