首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >ControllerContext为空

ControllerContext为空
EN

Stack Overflow用户
提问于 2013-09-27 23:55:02
回答 1查看 13.5K关注 0票数 3

我有这个MVC4控制器(ControllerB):

代码语言:javascript
复制
public class MyControllerB : Controller
{
    public bool Check(string actionName, ControllerBase controllerBase)
    {
        ControllerContext controllerContext = new ControllerContext(this.ControllerContext.RequestContext, controllerBase);

        ...
    }
}

我从"ControllerA“调用ControllerB的Check方法,如下所示:

代码语言:javascript
复制
bool b = new MyControllerB().Check("Index", this);

我得到Object reference not set to an instance of an object是因为this.ControllerContext为空。

如果我将Check方法移到ControllerA,它就能正常工作。但是我需要这个方法在一个不同的控制器中。如何修复代码,使this.ControllerContext`不为空?

EN

回答 1

Stack Overflow用户

发布于 2013-10-01 22:43:01

ControllerContext为空,因为您是从ControllerA手动创建ControllerB实例。

通常,IController实例是由注册的IControllerFactory创建的,通常是System.Web.Mvc.DefaultControllerFactory。控制器工厂将对实例执行new()操作并正确初始化设置。

正如@DZL所说,通常情况下,让两个控制器都子类化一个BaseController类要好得多,该类可以具有共享的初始化和共享的属性和方法。

我不明白你想要做什么的业务逻辑,但这里有一个使用两个控制器的基类的代码示例:

代码语言:javascript
复制
namespace MyNamespace.Controllers
{
    public class MyControllerBase : Controller
    {
        public bool Check(string actionName, ControllerBase controllerBase)
        {
            ControllerContext controllerContext = new ControllerContext(this.ControllerContext.RequestContext, controllerBase);
            return false;
        }
    }
    public class MyControllerA : MyControllerBase
    {
        ActionResult Index()
        {
            bool b = base.Check("Index", this);
            return View();
        }
    }
    public class MyControllerB : MyControllerBase
    {
        ActionResult Index()
        {
            bool b = base.Check("Index", this);
            return View();
        }
    }
}

如果你真的想做你所要求的事情,你必须调用IControllerFactory.CreateController(requestContext, controllerName)而不是new ControllerB(),但这是一种非常复杂的方式-我不推荐这样做。

票数 5
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/19055119

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档