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", оно работает.

Надеюсь, что это советы.

Другие вопросы по тегам