ASP.NET MVC 2 Preview 2: проблема дублирования областей контроллера
Я продолжаю порабощать вещь MVC 2: Области...
Теперь у меня есть два контроллера с одинаковым именем (HomeController) в основной папке контроллеров и в одной из областей. Оба имеют разные пространства имен, так что... теоретически они должны сосуществовать, но это не так. Ошибка:
Имя контроллера "Home" неоднозначно для следующих типов:
Namespace.HomeController
Namespace.Areas.AreaName.Controllers.HomeController
Это не относится только к контроллеру дома (особый?), Но относится к любой паре в любых областях.
Как добиться сосуществования одноименных контроллеров в разных областях?
Спасибо за ваше время:)
РЕДАКТИРОВАТЬ: Это нормально для одного и того же имени контроллера В разных областях: регистрация маршрутизации с пространством имен решает проблему (благодаря статье Аллена Скотта).
2 ответа
Если два контроллера с одинаковым именем класса находятся в двух разных областях, это работает, как и ожидалось.
В вашем случае у вас есть один контроллер в области и один контроллер в "папке контроллеров по умолчанию". Вы уверены, что это то, что вы хотите? Предполагается, что ваша "папка контроллеров по умолчанию" содержит какие-то общие контроллеры, такие как контроллер учетных записей по умолчанию?
Это действительно проблема маршрутизации ASP.NET, а не проблема имен или классов. Проблема, скорее всего, в том, что у вас есть два пути к неоднозначному имени контроллера; один зарегистрирован через регистрацию области и один через регистрацию маршрута по умолчанию в RegisterRoutes.
Также см. Этот пост о заказе области.
Если вы создаете пространство имен приложения MvcApplication1, вы написали попробуйте это.
public static void RegisterRoutes(RouteCollection routes)
{
routes.IgnoreRoute("{resource}.axd/{*pathInfo}");
AreaRegistration.RegisterAllAreas();
routes.MapRoute(
"Default", // Route name
"{controller}/{action}/{id}", // URL with parameters
new { controller = "Home", action = "Index", id = "" }, // Parameter defaults
null,
new[] { "MvcApplication1.Controllers" }
);
}
Установите корневое пространство имен контроллера маршрутов "MvcApplication1.Controllers", оно работает.
Надеюсь, что это советы.