Когда мы используем области, где должна быть размещена маршрутизация - asp mvc - PullRequest
0 голосов
/ 11 февраля 2012

Если у нас больше областей в одном проекте, где должны храниться значения маршрутизации.Что должно идти в Global.asax и что в классе в AreaAreaRegistration.cs Я не часто использую asp mvc (это все еще хобби), но маршрутизация постоянно вызывает у меня проблемы :( Я должен привести один пример, который меня смущает: у меня дваобласти и ссылки в одной области ( CityPage ), которая должна открыть страницу в другой области. Так что в моем global.asax у меня есть:

routes.MapRoute(
                "CityPage_home",
                "{country}/{city}",
                new { controller = "Home", action = "Index", country = UrlParameter.Optional, city = UrlParameter.Optional }
            );

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

И это работает. Но если я перееду "* CityPage_home * "от global.asax до CityPageAreaRegistration.cs, затем, когда я нажимаю на ссылку, которая должна открыть страницу в другой области, происходит сбой приложения, поскольку код вводится первым в методе CityPage/Home/Index.Я не понимаю, почему эта маршрутизация работает в первом случае, а не в другом.Есть идеи?

Ответы [ 2 ]

1 голос
/ 11 февраля 2012

на основе вашего описания.Я думаю, что ссылка в вашей области CityPage не соответствует шаблону area/controller/action, вместо этого она соответствует controller/action, в вашем случае country/city.

, когда у вас есть "CityPage_home" в вашем global.ascx, он соответствует первому маршруту с действием, равным «дому», и действием, равным «индексу».значения в вашем URL будут присвоены country и city.

, но если вы переместили маршрут "CityPage_home" на CityPageAreaRegistration.cs, тогда будет выбран маршрут default.так как маршруты в global.ascx будут сначала найдены, в этом случае область будет CityPage, если вы установите его по умолчанию.

@ Ник дает хорошее представление о маршрутизации с областью

1 голос
/ 11 февраля 2012

В каждой области для вас будет создан файл.Например.

AdminArea будет содержать файл с именем AdminAreaRegistration С таким методом внутри:

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

Я хотел бы изменить это, добавив контроллер по умолчанию.

Ссылки для действий

Традиционно мы используем следующее для создания ссылки:

@Html.ActionLink("MyLink","Index","Home",)

Чтобы создать ссылку на область администратора, мы используем это:

@Html.ActionLink("Admin Area","Index", new { area = "Admin", controller = "Home" })

Теперь, если вы находитесь внутри администратора и хотите разместить ссылку на домашнюю страницу, вам нужно сделать следующее:

@Html.ActionLink("Home","Index", new { area="", controller = "Home })

И, наконец, если вам нужно создать пользовательские маршруты, вы можете поместить маршруты области в новый файл, создаваемый в каждой области, и продолжать помещать маршруты, не относящиеся к области, в обычный файл Global.asax.

...