【问题标题】:using Areas in MVC5在 MVC5 中使用区域
【发布时间】:2016-08-08 19:46:50
【问题描述】:

我正在尝试实现如下路由:

等等……

我喜欢使用“区域”的想法,并希望通过使用区域来分隔所有代码。所以,我创建了我的区域结构,如下面的截图

ApplicationAreaRegistration.cs 中的代码是

public override string AreaName 
    {
        get 
        {
            return "Application";
        }
    }

    public override void RegisterArea(AreaRegistrationContext context) 
    {
        context.MapRoute(
            "Application_default",
            "Application/{controller}/{action}/{id}",
            new { action = "Index", id = UrlParameter.Optional }
        );
    }

但是,我无法达到我想要的路线

http://example.com/Application/Index

取而代之的是http://example.com/Application/Application/Index

我尝试在 AreaRegistration 中更改没有 {controller} 的默认路由

context.MapRoute(
                "Application_default",
                "Application/{action}/{id}",
                new { action = "Index", id = UrlParameter.Optional }
            );

但是我知道了,Controller 是必需的区域。

我知道如果我将控制器放在根控制器文件夹中,我可以轻松获得http://example.com/Application/Index。但这意味着我不能再像区域那样对我的代码进行分组,它将被分隔在 MVC 文件夹中。

我想知道的是,我是否可以通过使用这些区域来实现我想要的,或者我是否正在尝试做一些不可能的事情?

【问题讨论】:

  • 您真的需要区域来执行此操作吗?您所描述的只是多个控制器。您可以修改路由,但在这种情况下没有必要。
  • 例如,如果您将第二个控制器添加到某个区域,您希望发生什么?那么 URL 是什么?
  • 我不会将第二个控制器添加到一个区域。如果我添加它会变成 Application/Application/ActionA Application/AnotherController/ActionA
  • 这就是为什么我很困惑并发布了一个问题。如果我使用多个控制器,我可以得到我想要的。但我想将所有相关代码分组在相关区域中,而不是放在根视图/控制器/模型文件夹中。如果不可能,请随时告诉我。
  • 有可能正如下面的答案所示,我只是对您认为您从区域而不是这里的控制器获得什么好处感到困惑。

标签: asp.net-mvc asp.net-mvc-routing asp.net-mvc-areas asp.net-mvc-5


【解决方案1】:

您需要将默认控制器名称添加到路由,以便 MVC 在您将控制器路由值从 URL 中取出时了解将其放入的内容。

public override void RegisterArea(AreaRegistrationContext context) 
{
    context.MapRoute(
        "Application_default",
        "Application/{action}/{id}",
        new { controller = "Application", action = "Index", id = UrlParameter.Optional }
    );
}

【讨论】:

  • 当额外的控制器被添加到一个区域时,这将中断。
  • 是的。但是总是可以为额外的控制器添加额外的路由。这确实回答了 OP 提出的确切问题。
猜你喜欢
  • 2014-02-01
  • 2014-01-13
  • 1970-01-01
  • 2016-12-19
  • 2015-06-06
  • 2015-01-18
  • 1970-01-01
  • 2014-10-24
  • 1970-01-01
相关资源
最近更新 更多