2013-12-10 81 views
2

我有兩個途徑:ActionLink的不區分兩種不同的類似的航線

routes.MapRoute(
     "route1", 
     "{controller}/{action}/{param1}/{param2}/NotTest/{notParam}/{param4}", 
     new { controller = "Home", action = "Index" }, 
      new[] { "Controllers" }); 

     routes.MapRoute(
      "route2", 
      "{controller}/{action}/{param1}/{param2}/Test/{param3}/{param4}", 
      new { controller = "Home", action = "Index" }, 
       new[] { "Controllers" }); 

凡NotTest和測試都在URL和區分兩條路線的唯一靜態字符串是notParam和參數3是不同的字符串。我可以使用actionlink鏈接到route2,但任何時候我嘗試鏈接到route1我都會得到一個獲取請求給我的控制器的一堆參數,而不是使用實際路由進行鏈接。隨着RouteLink我甚至沒有得到一個URL ...

有什麼我應該做的區別兩條路線?

我的鏈接是這樣的:

@Html.ActionLink("Example Data", "Action", "Controller", new {param1= Model.Data, param2, param3, notParam, param4}, new { id = "columnsID" }) 
+3

「不同的相似」?這就像「漂亮醜陋」嗎?抱歉不得不說些什麼。如果您在'RouteConfig'中將'Route 2'映射的路線移動到'Route 1'上方,那麼與您的'ActionLink'相反呢? –

+0

如果我將路線2移動到路線1上方並且使用RouteLink既不能工作......如果我使用actionlink,它也與我沒有移動路線相同 – noname

回答

2

您應該使用Html.RouteLink方法在這裏:

@Html.RouteLink("Example Data", 
       "route1", 
       new 
       { 
        action = "Action", 
        controller = "Controller" 
        /*other route values*/ 
       }) 
+0

如果我使用RouteLink並鏈接到route2我得到一個空的錨標籤,但route1的路由起作用。想法? – noname

+0

@BenNelson你說過所有的路線值嗎? MVC路由中只有最後一個參數是可選的。 –

+0

雅與這些行動相關的所有路線列出 – noname

1

您可能需要通過直接引用的路徑建立此鏈接:

<a href="@Url.RouteUrl("route1", new { httproute = "", controller = "Controller", action = "Action", param1 = param1, param2 = param2, notParam = notParam, param4 = param4 })">Your Link</a> 

<a href="@Url.RouteUrl("route2", new { httproute = "", controller = "Controller", action = "Action", param1 = param1, param2 = param2, param3 = param3, param4 = param4 })">Your Link</a> 
+0

RouteUrl沒有生成任何東西? – noname

+0

我猜這個問題和上面描述的一樣。您必須確保指定所有路線參數。 Url.RouteUrl本質上與Html.RouteLink相同,除了它只提供Url並且不會爲你建立整個鏈接。 –