如何为不同区域的路线生成RouteLink?

时间:2010-03-26 19:51:47

标签: asp.net-mvc-2 asp.net-3.5

我有两个不同的区域,我在其中一个区域中有一条特定于该区域的路线,但我需要使用来自其他区域的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 个答案:

答案 0 :(得分:1)

在您的路线对象中,您只需要一个名为area的属性,其名称为该区域。

Html.RouteLink("My Link Text", 
                new { area = "MyArea", controller = "MyController" ... }, 
               null);

答案 1 :(得分:0)

您需要更改路线定义 - 有关详细信息,请参阅答案ASP.NET MVC Url.Action routing 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"}

Url.Action看起来像

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

会产生类似http://localhost:56291/preview/somedomainname/home/index

的网址