Asp.net mvc 区域布线,为什么需要区域名称?

Asp.net mvc 区域布线,为什么需要区域名称?,asp.net-mvc,Asp.net Mvc,我有一个有两个领域的项目。这确实有效,但我是一个新手,我想知道为什么 我有一个叫LogonArea的地方 context.MapRoute( "LogonArea_default", "LogonArea/{controller}/{action}/{id}", new { action = "Index", id = UrlParameter.Optional } 为什么需要“LogonArea/”部件?

我有一个有两个领域的项目。这确实有效,但我是一个新手,我想知道为什么

我有一个叫LogonArea的地方

        context.MapRoute(
            "LogonArea_default",
            "LogonArea/{controller}/{action}/{id}",
            new { action = "Index", id = UrlParameter.Optional }
为什么需要“LogonArea/”部件?如果没有它,它就不能找到控制器吗

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

如果这真的是必要的,我如何才能屏蔽它,使该区域在url中不可见


谢谢

如果您从区域路由注册中删除
/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
的控制器,我可以转到url
/Foo
来访问它,而无需转到
/Admin/Foo

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


当你想“离开”该区域时,请查看我关于指定该区域的更新。这很有效。我确实在ActionLink中有'area='位,但我想我所做的是在从路由中删除{area}段时删除它。非常感谢您的帮助:-)
@Html.ActionLink("Go Home", "Index", "Home", new { area = "" }, null)