【问题标题】:asp.net MVC Redirect actions from inherited controllers to generic base controller viewsasp.net MVC 将操作从继承的控制器重定向到通用基本控制器视图
【发布时间】:2015-04-30 08:30:36
【问题描述】:

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

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

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

【问题讨论】:

    标签: asp.net-mvc inheritance controller routes


    【解决方案1】:

    您将路由与简单继承混淆了。路由框架相当简单。给定默认路由{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(),则只需使用 URL /Base/Bar 即可。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2013-06-20
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多