ASP.NET MVC, области, маршрутизация и фабрика контроллеров - PullRequest
1 голос
/ 05 апреля 2010

У меня интересная проблема с маршрутизацией в приложении ASP.NET MVC. Я создаю CMS, и у меня есть универсальный обработчик, который берет URL-адрес и проверяет, есть ли какой-либо соответствующий контент в базе данных. Если это так, он отображает его, в противном случае мы получаем 404.

Теперь у меня есть вся эта работа с некоторыми тестовыми данными, я перешел к написанию быстрой системы администрирования. Я подумал, что буду использовать некоторые из новых функций Area, встроенных в MVC 2, поэтому я создал область с именем Admin с контроллером под названием Home. Однако теперь у меня возникла проблема с возвратом HomeController по умолчанию в административной области при запросе корневого пути приложения.

Проблема в том, что нет другого HomeController для «корневого» приложения (в котором размещены все области), вместо этого корень будет перенаправлен на обработчик my catch-all и заполнен из базы данных. Так что теперь фабрика контроллеров возвращает лучший соответствующий контроллер, который, по его мнению, относится к области администратора, и мне действительно нужно, чтобы он вообще не совпадал с ним - как это было ранее.

Помимо переименования Admin HomeController в другое, есть ли другое решение?

Ответы [ 2 ]

4 голосов
/ 19 ноября 2010

В области администратора откройте AdminAreaRegistration.cs

Добавьте правильное пространство имен, в котором находятся ваши контроллеры:

   public override void RegisterArea(AreaRegistrationContext context)
      {
         context.MapRoute(
             "Admin_default",
             "Admin/{controller}/{action}/{id}",
             new { action = "Index", id = UrlParameter.Optional }*,
             new string[] { "Stridh.Areas.Admin.Controllers" }*
         );
      }

Теперь сделайте то же самое в global.asax:

     routes.MapRoute(
         "Default", // Route name
         "{controller}/{action}/{id}", // URL with parameters
         new { controller = "Home", action = "Index", id = UrlParameter.Optional },
         new string[] { "Stridh.Controllers" } // Parameter defaults
     );
0 голосов
/ 05 апреля 2010

Редактировать ... (извините, последний ответ был не по теме).

Снято в темноте. Попробуйте изменить маршрут по умолчанию ....

routes.MapRoute ( "По умолчанию",
"{Контроллер} / {действие} / {ID}",
new {controller = "Home", area = "" , action = "Index", id = ""}

или, возможно, area = null.

или изменение контроллера из дома на что-то другое.

...