区域路由,为什么需要区域名称?

时间:2014-04-25 10:29:55

标签: asp.net-mvc

我有一个有2个区域的项目。它确实有效,但我是新手,我想了解原因。

我有一个名为LogonArea的区域

        context.MapRoute(
            "LogonArea_default",
            "LogonArea/{controller}/{action}/{id}",
            new { action = "Index", id = UrlParameter.Optional }

为什么需要“LogonArea /”部分?如果没有它,它不应该找到控制器吗?

当我尝试删除它时,我仍然可以使用该区域到达控制器,但奇怪的是,在该页面上我无法到达其他区域。

如果真的有必要,我怎么能掩盖它,以便在网址中看不到区域?

感谢

1 个答案:

答案 0 :(得分:1)

如果从区域路径注册中删除/LoginArea/,它将能够找到您的控制器(只要您没有任何冲突的控制器名称,例如主要部分中的HomeController和HomeController中的该地区)。

它主要是为了您的方便。如果您有管理员区域,则可以通过/ Admin / {controller}访问您网站中的所有内容。它主要只是一个组织事物。

public class AdminAreaRegistration : AreaRegistration 
{
    public override string AreaName 
    {
        get 
        {
            return "Admin";
        }
    }

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

我在这个项目中创建了一个名为FooController的控制器,我可以转到网址/Foo,无需转到/Admin/Foo

当您在区域外创建指向控制器的链接时,您需要指定它所在的区域(或指定没有区域):

@Html.ActionLink("Go Home", "Index", "Home", new { area = "" }, null)