2009-11-20 2 views
1

Я пытаюсь получить ASP.NET MVC 2 однопроектной регистрации области для работы. Пробовал с предварительным просмотром 2 и теперь с бета-версией без везения. Я использовал диалог «Добавить область», чтобы создать область «NewsModule». Создал в нем NewsModuleController и указатель Index для него.ASP.NET MVC 2 Бета однопроект Регистрация области Получение HTTP 404

регистрация маршрута для этой зоны выглядит следующим образом:

 
context.MapRoute(
       "NewsModule_default", 
       "NewsModule/{action}/{id}", 
       new { action = "Index", id = "", controller = "NewsModule", area = "NewsModule" } 
      ); 

Я добавил AreaRegistration.RegisterAllAreas(); вызовите мой Global.asax. Доступ к http://localhost/mymvcproj/NewsModule получает ошибку HTTP 404.

Используя отладчик маршрута Фила Хаака, я мог бы подтвердить, что маршрут правильно сопоставлен и привязан этим URL-адресом, однако, похоже, что структура не может найти файлы Area, может быть?

Любой может помочь?

Спасибо, Фелипе

ответ

2

Проблема решена. Вот что я сделал, чтобы решить:

AreaRegistration.cs файл:

 
public override void RegisterArea(AreaRegistrationContext context) 
{ 
    context.MapRoute(
     "NewsModule_default", 
     "NewsModule/{controller}/{action}/{id}", 
     new { controller = "NewsModule", action = "Index", id = "" }); 
} 

ВАЖНОЕ: Добавить в ".Areas." в пространство имен (Namespace.Areas.ControllerName).

Global.asax.cs:

 
public static void RegisterRoutes(RouteCollection routes) 
{ 
    routes.IgnoreRoute("{resource}.axd/{*pathInfo}"); 

    // must be called RIGHT AFTER IgnoreRoute() 
    AreaRegistration.RegisterAllAreas(); 

    routes.MapRoute(
     "Default",            // Route name 
     "{controller}/{action}/{id}",       // URL with parameters 
     new { controller = "Home", action = "Index", id = "" } // Parameter defaults 
    ); 

    //RouteDebug.RouteDebugger.RewriteRoutesForTesting(RouteTable.Routes); 
} 
+0

Если вы когда-либо добавляли модульные тесты в ваше приложение MVC, которые вызывают RegisterRoutes, они будут бросать некоторые странные исключения 'CompilationLock' с этим порядком вызовов; он связан с вызовом статического 'RegisterAllAreas' в нестатических' RegisterRoutes'. Решение этой проблемы описано в [другом вопросе] (http://stackoverflow.com/questions/2851514/compliationlock-throws-httpexception-when-registering-areas-for-asp-net-mvc-unit/2851518#2851518). Однако, выполняя это решение, если вы хотите проверить маршрутизацию для определенной области, вам нужно явно зарегистрировать маршруты области в тесте. – patridge

0

Попробуйте удалить «область = "NewsModule" от регистрации маршрута в папке/Area NewsModule. Таким образом, оказывается, как,

context.MapRoute(
       "NewsModule_default", 
       "NewsModule/{action}/{id}", 
       new { action = "Index", id = "", controller = "NewsModule"} 
      ); 

Вот мой аккаунт района Маршруты Регистрация ,

Местоположение/Область/Account/

public class AccountAreaRegistration : AreaRegistration 
    { 
     public override string AreaName 
     { 
      get { return "Account"; } 
     } 

     public override void RegisterArea(AreaRegistrationContext context) 
     { 
      context.MapRoute(
       "Account_default", 
       "Account/{controller}/{action}/{id}", 
       new { controller = "", action = "", id = "" } 
      ); 
     } 
    } 
+0

Первоначально, у меня не было аргумента области там, я попробовал, добавив его, чтобы увидеть, если что решить эту проблему, но не сделал этого. Результат совпадает с указанием области или без нее. –

+0

Вы уверены, что используете библиотеку Version 2? – LiamB

+0

Действует ли действие контроллера? – LiamB

 Смежные вопросы

  • Нет связанных вопросов^_^