ASP.NET MVC 2 области 404 - PullRequest
       27

ASP.NET MVC 2 области 404

1 голос
/ 10 июня 2010

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

Я создал новую область под названием «Безопасный» и поместил в нее новый контроллер с именем HomeController.Затем я создал новый вид Home / Index.aspx.Однако, когда я просматриваю 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 }
            );
        }

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

Ответы [ 5 ]

4 голосов
/ 28 мая 2011

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

2 голосов
/ 11 июня 2010

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

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 }
            );

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

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

2 голосов
/ 10 июня 2010

Конечно, у меня есть Области, работающие с 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" в моей области "Albums".

Как выглядит ваша структура?

0 голосов
/ 10 июня 2010

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

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

0 голосов
/ 10 июня 2010

Вы вызываете AreaRegistration.RegisterAllAreas () в вашем global.asax?

Sub Application_Start()
    AreaRegistration.RegisterAllAreas()

    RegisterRoutes(RouteTable.Routes)
End Sub
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...