2010-06-10 4 views
1

Кто-нибудь мог получить Области в ASP.NET MVC 2 для работы?ASP.NET MVC 2 Области 404

Я создал новый раздел под названием «Безопасный» и разместил в нем новый контроллер под названием HomeController. Затем я создал новый Home/Index.aspx view. Однако, когда я просматриваю http://localhost/myapp/Secure/, он не может найти ресурс 404. http://localhost/myapp/Secure/Home дает ту же ошибку.

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

public override void RegisterArea(AreaRegistrationContext context) 
     { 
      context.MapRoute(
       "Secure_default", 
       "Secure/{controller}/{action}/{id}", 
       new { action = "Index", id = UrlParameter.Optional } 
      ); 
     } 

Я также попытался это:

public override void RegisterArea(AreaRegistrationContext context) 
     { 
      context.MapRoute(
       "Secure_default", 
       "Secure/{controller}/{action}/{id}", 
       new { controller = "Home", action = "Index", id = UrlParameter.Optional } 
      ); 
     } 

Спасибо, Джастин

ответ

2

Конечно, у меня есть зоны для работы с ASP.NET MVC 2.

Его трудно для людей, чтобы отлаживать маршрутам над SO, самый простой способ для вас, чтобы использовать Phil Haacks Route Debugger. Он расскажет вам, какие маршруты (и области) разрешаются для определенного URL-адреса. Очень удобно.

Однако больной принять удар, попробуйте изменить свой маршрут к этому:

 context.MapRoute(
      "Secure_default", 
      "Secure", 
      new { action = "Index", controller = "Home", id = UrlParameter.Optional } 
     ); 

URL-адрес (<yourhost>/Secure) найдет свою область Secure, но не знает, какой контроллер вы передаете запрос, так как вы не указали значение по умолчанию для controller в вашем маршруте.

Вот мои настройки:

Areas 
     Albums 
      Controllers 
       AlbumsController.cs (namespace Web.Areas.Albums.Controllers) 
      Models 
      Views 
       Albums 
        Index.aspxx 
      AlbumsAreaRegistration.cs 
       context.MapRoute(
        "Albums_Default", 
        "Albums", 
        new { controller = "Albums", action = "Index", id = UrlParameter.Optional) 

URL-адрес: http://localhost/Albums запускает "Index" действие моего "AlbumsController" в моей области "Альбомы".

О чем вы, структура?

+0

Изменение MapRoute до этого не имело никакого эффекта. Я добавил его DLL маршрутизации отладчика, и когда я иду в/secure, он говорит, что он соответствует, хотя без DLL отладчика я получаю 404: Соответствующий маршрут: Secure/{controller}/{action}/{id} True \t Secure/{controller}/{action}/{id} \t controller = Home, action = Index, id = System.Web.Mvc.UrlParameter \t (null) \t Пространства имен = System.String [], area = Secure, UseNamespaceFallback = False – Justin

+0

Могут ли пространства имен быть проблемой? Мой класс SecureAreaRegistration находится в пространстве имен TothSolutions.Web.Areas.Secure и мой класс HomeController находится в пространстве имен TothSolutions.Web.Areas.Secure.Controllers. – Justin

+0

Нет - это пространство имен правильно. Я обновляю свой ответ своей структурой для своего Района. – RPM1984

0

вы звоните AreaRegistration.RegisterAllAreas() в вашей глобальной. asax?

Sub Application_Start() 
    AreaRegistration.RegisterAllAreas() 

    RegisterRoutes(RouteTable.Routes) 
End Sub 
+0

Довольно уверен, что это по умолчанию было создано при создании нового веб-приложения MVC2. Если он вручную удалил его по ошибке, конечно. – RPM1984

+0

Да, это там. – Justin

0

Вы пытались использовать http://localhost/myapp/Secure/Home/index? Я нахожу так много раз, что, когда я использую индекс в качестве имени представления и не указываю его в пути, он никогда не работает. Он должен работать, но он никогда не работает для меня.

Мне не нравится называть мой индекс в любом случае, поэтому для меня это не очень важно.

+0

Да, я пробовал это, и он по-прежнему дает 404. – Justin

2

Я получил это работает, ответ должен был изменить область регистрации класса для этого:

context.MapRoute(
       "Secure_Default", // Route name 
       "Secure/{controller}/{action}/{id}", // URL with parameters 
       new { area="Secure", controller = "Home", action = "Index", id = UrlParameter.Optional }, // Parameter defaults 
       new[] { typeof(Controllers.HomeController).Namespace } 
      ); 

Я понятия не имею, почему он работал для другого разработчика, а не для меня, и я чувствую, что он должен " просто работайте "из коробки, когда вы создаете новый Area, вам не нужно будет возиться с отображением маршрута.

В любом случае, спасибо всем за помощь, и я даю ответ на RPM для всей его тяжелой работы.

4

Я уверен, что это было потому, что ваш класс регистрации области находился в другом пространстве имен, в котором был размещен проект. Это объясняет, почему ваше решение сработало - вы зарегистрировали его с перегрузкой, которая занимает пространство имен.У меня была аналогичная проблема, и она была исправлена ​​путем исправления пространства имен.

+0

Это просто спас мой день, спасибо! –

+0

Пространства имен были для меня неправильными. Мне не хватало «.Areas». часть – Dann

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