Как мне сгенерировать RouteLink для маршрута в другой области? - PullRequest
0 голосов
/ 26 марта 2010

У меня есть две разные области, и у меня есть маршрут в одной из тех областей, которая специфична для этой области, но мне нужно сгенерировать ссылку на этот маршрут, используя Html.RouteLink из другой области (именно так вы переходите в новая область), но она не будет работать ... Кажется невозможным использовать RouteLink для маршрутов в другой области.

Как лучше всего обойти это? Должен ли я просто определить новый маршрут в другой области и назвать его по-другому?

ОБНОВЛЕНИЕ (код):

На главной странице в главной области (я пробовал несколько способов, каждый из которых дал один и тот же результат):

<a href="<%= Url.Action("Index", "Home", new { area = "CustomerSite", route = "CustomerSite_preview", domain = (string)ViewData["DomainName"] }, null) %>">

В зоне CustomerSite регистрация в качестве первого зарегистрированного маршрута:

        context.MapRouteLowercase(
            "CustomerSite_preview",
            "preview/{domain}/{controller}/{action}/{id}",
            new { area = "CustomerSite", controller = "Home", action = "Index", id = "" },
            new { isCustomerSite = new CustomerSiteRouteConstraint() },
            new string[] { "GrayHills.CarLotHosting.Web.Areas.CustomerSite.Controllers" }
        );

Ответы [ 2 ]

1 голос
/ 26 марта 2010

В вашем объекте маршрута вам просто нужно свойство с именем area с названием area.

Html.RouteLink("My Link Text", 
                new { area = "MyArea", controller = "MyController" ... }, 
               null);
0 голосов
/ 07 апреля 2010

Вам нужно изменить определение маршрута - см. Ответ ASP.NET MVC Url.Action error маршрутизации для получения дополнительной информации.

По сути, ваш маршрут должен выглядеть следующим образом, поскольку вы явно указываете имя контроллера и действие:

context.MapRouteLowercase(
        "CustomerSite_preview",
        "preview/{domain}/home/index/",
        new {   area = "CustomerSite"
              , controller = "Home"
              , action = "Index"},
        new { isCustomerSite = new CustomerSiteRouteConstraint() },
        new string[] { 
            "GrayHills.CarLotHosting.Web.Areas.CustomerSite.Controllers"}

The Url.Action будет выглядеть как

<a href="<%= Url.Action("Index"
                        , new {domain = (string)ViewData["DomainName"] }
                        , null) %>">

, что приведет к URL-адресу, подобному http://localhost:56291/preview/somedomainname/home/index

...