在MVC5中使用区域

时间:2016-04-16 23:06:43

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

我正在努力实现如下路线:

等...

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

,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文件夹中分离。

我想知道的是,我是否可以通过使用“区域”来达到我想要的目标,还是我尝试做到这一点是不可能的?

1 个答案:

答案 0 :(得分:1)

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

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