1

我的项目结构:

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 }
    );
}

谢谢...

4

1 回答 1

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.

于 2013-03-22T14:03:03.393 回答