我的项目结构:
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 }
);
}
...谢谢
答案 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
。