【发布时间】:2012-03-07 23:46:02
【问题描述】:
我看过一些类似的问题,但我发现我有一个不同的问题。
我有一个 MVC4 项目,其中包含基础项目和 3 个区域中的控制器。每个区域都包含一个名为 AdminController 的控制器和一个方法 List。
我的问题是当我使用链接转到方法列表时总是通过同一个控制器(例如用户区域中的 AdminController)但返回的视图是正确的。
项目的结构是这样的:
- Mimbre.Administration(web mvc4 项目)
- 区域
- 内容
- 控制器
- 管理员控制器
- 型号
- 查看次数
- 管理员
- 列表.chtml -ContentsAreaRegistration.cs
- 管理员
- 控制器
- 日志
- 控制器
- 管理员控制器
- 型号
- 查看次数
- 管理员
- List.chtml
- 管理员
- LogsAreaRegistration.cs
- 控制器
- 用户
- 控制器
- 管理员控制器
- 型号
- 查看次数
- 管理员
- List.chtml
- 管理员
- UsersAreaRegistration.cs
- 控制器
- 内容
- 控制器(基础项目)
- 视图(基础项目)
- 区域
区域注册的类包含像这样的RegisterArea方法(根据当前区域具有适当的名称和命名空间):
public override void RegisterArea(AreaRegistrationContext context) {
context.MapRoute(
"Contents_default",
"Contents/{controller}/{action}/{id}",
new { action = "Index", id = UrlParameter.Optional },
new string[] { "Mimbre.Administration.Areas.Contents.Controllers" }
);
}
Global.asax 包含为基础项目注册路由的方法
public static void RegisterRoutes(RouteCollection routes) {
routes.IgnoreRoute("{resource}.axd/{*pathInfo}");
AreaRegistration.RegisterAllAreas();
routes.MapRoute(
name: "Default",
url: "{controller}/{action}/{id}",
defaults: new { controller = "Home", action = "Index", id = UrlParameter.Optional },
namespaces: new string[]{"Mimbre.Administration.Controllers"}
);
}
在 index.chtml(在基础项目中)我创建了指向每个区域的 List 方法的链接:
<a href="@Url.Action("List", "Admin", new { area = "Contents"})" >Contents list</a>
<a href="@Url.Action("List", "Admin", new { area = "Logs"})" >Logs list</a>
<a href="@Url.Action("List", "Admin", new { area = "Users"})" >Users list</a>
在生成的 html 中,这些链接如下所示:
<a href="/Contents/Admin/List/">Contents list</a>
<a href="/Logs/Admin/List/">Logs list</a>
<a href="/Users/Admin/List/">Users list</a>
我认为这些链接是正确的,问题是任何点击的链接总是带我通过用户区域的 AdminController 中的方法列表,从不选择其他区域的 AdminController 中的方法列表。
这个问题可以通过重命名控制器的名称来解决,每个区域的名称都是唯一的,但是我真的需要在所有区域中保持相同的控制器名称,知道吗???
比提前!!!
【问题讨论】:
标签: c# asp.net-mvc asp.net-mvc-4 asp.net-mvc-routing