2010-03-26 16 views
0

我有兩個不同的區域,我在那個區域中有一個特定於該區域的路線,但我需要使用另一個區域的Html.RouteLink生成該路線的鏈接(這是您如何進入新的區域),但它不會工作......似乎不可能使用RouteLink來路由不同的區域。如何生成到不同區域的路線的RouteLink?

這是最好的方法是什麼?我應該在其他地區定義一條新的路線並以不同的名稱命名嗎?

UPDATE(代碼):

在主要區域的母版頁(我已經嘗試過多種方式,所有這些都產生相同的結果):

<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" } 
     ); 
+0

這真的不應該這麼難......我不明白 – 2010-03-26 20:12:36

+0

你可以發佈你的代碼嗎?我使用RouteLink,它工作正常。 – Ahmad 2010-03-27 08:37:09

+0

只要你創建一個鏈接到你所在的區域,但不到另一個區域,RouteLink就能正常工作......我會在一段時間後發佈我的代碼 – 2010-03-27 22:47:14

回答

1

在您的路線對象中,您只需要一個名稱爲area的屬性並使用該區域的名稱。

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

我有。它沒有幫助。 – 2010-03-26 20:01:23

+0

我不確定它是否與'RouteLink'方法一樣,但看看http://msdn.microsoft.com/en-us/library/ee671793(VS.100).aspx並考慮使用而不是「ActionLink」? – 2010-03-26 20:36:48

+0

這是一個定製的路線:example.com/preview/somedomain.com/所以我不認爲actionlink可以做到這一點 – 2010-03-26 20:44:48

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