Mvc区域路由?

时间:2013-03-22 13:30:26

标签: asp.net-mvc routing area

我的项目结构:

Controller
    AdminController
    HomeController

添加区域后,我的项目结构我在项目中添加了一个管理区域,

Areas
    Admin
        Controller
            SomeController
Controller
    AdminController
    HomeController

然后所有链接都被破坏了。例如

@Html.ActionLink(
    "go to some action", 
    "SomeAction", 
    "Admin", 
    new { area = "" }, 
    null)

当我写上面的链接时,它会将我路由到www.myDomain.com/Admin/SomeAction,但这是区域操作,我想路由到AdminController操作。

我该怎么做?我应该更改区域或控制器名称吗?

更新

以上链接输出:

domain/Admin/SomeAction
// I expect that is AdminController/SomeAction
// but not. There is SomeAction in my admin controller
// I get this error "The resource cannot be found."
// because it looks my expected, but it works unexpected
// it tries to call AdminArea/SomeController/SomeAction

更新2

例如:

 @Html.ActionLink(
    "go to some action", 
    "SomeAnotherAction", 
    "Admin", 
    new { area = "" }, 
    null)

上面的链接我没有收到任何错误,因为我的区域里有一个SomeAnotherAction。

区域注册

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

...谢谢

1 个答案:

答案 0 :(得分:1)

由于您首先注册了您的区域,因此它们优先。这没有简单的方法。最好的解决方案是将网站主要部分中的AccountController重命名为其他内容,以避免冲突。

另一种可能性是限制区域路线注册中的控制器:

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

现在,只有/Admin/Some/{action}/Admin/SomeOther/{action}的请求才会被路由到该区域,这意味着/Admin/SomeAction将被全局路由定义拦截并路由到您的AdminController