2013-12-10 38 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并且不会为你建立整个链接。 –