MVC5自定义路由从区域中删除控制器名称

时间:2014-09-24 16:34:46

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

到目前为止,我无法完成这项工作,我需要一些帮助。我有一个基本的MVC 5站点,我添加了一个名为Administration的区域。对于我的生活,我无法弄清楚如何正确设置区域的默认控制器/操作。

在我的网站中,我有一个名为Admin的区域,一个名为Admin的控制器(带索引方法和视图),这是区域注册:

public override void RegisterArea(AreaRegistrationContext context) 
{
    context.MapRoute(
        name: "Admin_base",
        url: "Admin",
        defaults: new { area = "Admin", controller = "Admin", action = "Index", id = UrlParameter.Optional }
    );

    context.MapRoute(
        "Admin_default",
        "Admin/{controller}/{action}/{id}",
        new { action = "Index", id = UrlParameter.Optional }
    );
}

第一个MapRoute允许我浏览http://myapplication/Admin并显示我设置的视图(管理员/索引),URL保持http://myapplication/Admin(这就是我想要的)。现在,通过添加它,它会打破到控制器的任何进一步路由。因此,当我尝试导航到管理区域中的菜单控制器时,它会失败。

有没有正确的方法呢?

即。我需要正确地设置http://myapplication/Admin/Menu/Create路由,但还需要保留该区域的默认控制器/操作。

2 个答案:

答案 0 :(得分:4)

您应该能够将它们组合成一个:

context.MapRoute(
    "Admin_default",
    "Admin/{controller}/{action}/{id}",
    defaults: new { area = "Admin", 
                    controller = "Admin", 
                    action = "Index", 
                    id = UrlParameter.Optional }
);

通过指定默认值,您应该能够调用/Admin/,其余参数将设置为默认值。

答案 1 :(得分:1)

如果您使用相同的控制器名称区域和默认值(例如:HomeController)。使用该

的命名空间
context.MapRoute(
                "Admin_default",
                "Admin/{controller}/{action}/{id}",
                new {
                    area = "Admin",
                    controller = "Home",
                    action = "Index", id = UrlParameter.Optional },
                namespaces: new[] { "{{Namespace}}.Areas.Admin.Controllers" }
            ); 

默认为

routes.MapRoute(
                name: "Default",
                url: "{controller}/{action}/{id}",
                defaults: new {  controller = "Home", 
                action = "Index", 
                id = UrlParameter.Optional },
                namespaces: new[] { "{{Namespace}}.Controllers" }
            );