Я видел несколько похожих вопросов, но обнаружил, что у меня другая проблема.
У меня есть проект MVC4 с контроллерами в базовом проекте и 3 областями.Каждая область содержит контроллер с именем AdminController и метод List.
Моя проблема заключается в том, что когда я использую ссылку для перехода к методу, список всегда проходит через один и тот же контроллер (например, AdminController в области Users), но возвращаемое представление верное.
Структура проекта выглядит следующим образом:
- Mimbre.Administration (веб-проект mvc4)
- Области
- Содержание
- Контроллеры
- Модели
- Представления
- Администратор
- List.chtml -ContentsAreaRegistration.cs
- Logs
- Контроллеры
- Модели
- Просмотры
- LogsAreaRegistration.cs
- Пользователи
- Контроллеры
- Модели
- Просмотры
- UsersAreaRegistration.cs
- Контроллеры (базовыеproject)
- Views (базовый проект)
Классы для регистрации области содержат такой метод 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>
Я думаю, что эти ссылки правильные, проблема в том, что любая нажатая ссылка всегда ведет меня через метод List в области AdminController в области Users, метод List в AdminController других областей никогда не выбирается.
Эту проблему можно решить, переименовав имя контроллера, уникальное имя для каждой области, но мне действительно нужно сохранить одинаковое имя контроллера во всех областях,любая идея???
Заранее спасибо !!!