【发布时间】:2010-07-13 10:37:24
【问题描述】:
我构建了自己的 Controller 类,它继承自 BaseController。但是构造函数中的ControllerContext 是“null”。我应该在哪里指定ControllerContext?
【问题讨论】:
标签: asp.net-mvc
我构建了自己的 Controller 类,它继承自 BaseController。但是构造函数中的ControllerContext 是“null”。我应该在哪里指定ControllerContext?
【问题讨论】:
标签: asp.net-mvc
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 属性的最早点是通过覆盖Execute 或Initialize 方法(但首先调用base.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.
}
后者 (Initialize) 是您可以使用 ControllerContext 属性的绝对最早点,除非您自己处理分配,不建议这样做(因为框架的一部分将取决于将该属性分配给当时)。
希望对您有所帮助。
【讨论】: