asp.net MVC将从继承的控制器到通用基本控制器视图的操作重定向

时间:2015-02-27 15:13:26

标签: asp.net-mvc inheritance controller routes

我有一个通用的基本控制器,由其他一些控制器继承。

此请求/InheritedController/{Action}是否可能重定向到/Base/{Action}

或者,即使执行了基本控制器中的代码,应用程序是否也会尝试重定向到InheritedContoller/{Action}

1 个答案:

答案 0 :(得分:2)

您使用简单的继承混淆了路由。路由框架相当简单。给定默认路由{controller}/{action}/{id},它将逐字地找到具有该名称的控制器,将其新增,并尝试使用其具有的任何其他请求数据来对其执行操作。它既不知道也不关心该类继承自基本控制器。如果要重定向到基本控制器的同名操作,则需要在继承的控制器上覆盖此方法以进行重定向:

public class FooController : BaseController
{
    public override ActionResult Bar()
    {
        return RedirectToAction("Bar", "Base");
    }
}

public class BaseController
{
    public virtual ActionResult Bar()
    {
        return View();
    }
}

然后,当您转到/Foo/Bar时,您将被重定向到/Base/Bar。但是,重要的是,这意味着您的基本控制器必须能够自己实例化 - 它不能是抽象的。

但是,对于它的价值而言,只是从孩子重定向到父母会让人质疑为什么你首先要继承。如果您想将某人发送到操作Base.Bar(),请使用网址/Base/Bar并完成操作。