如何强制链接使用特定航线(MVC路由)

问题描述:

我有这两条路线:如何强制链接使用特定航线(MVC路由)

routes.MapRoute(
      "Default", // Route name 
      "{controller}/{action}/{id}", // URL with parameters 
      new { controller = "Home", action = "Index", id = UrlParameter.Optional } // Parameter defaults 
     ); 

     routes.MapRoute(
      "Default2", // Route name 
      "{controller}/{action}/{OrderId}/{CustomerID}", // URL with parameters 
      new { controller = "NorthwindOrders", action = "Index", OrderId = UrlParameter.Optional, CustomerID = UrlParameter.Optional } // Parameter defaults 
     ); 

,并希望创建一个使用第二路径路段。

我怎样才能做到这一点?

+0

您应该反转这两个参数,因为第二个参数都是可选的(与上面的id参数相同),第一个URL将始终与第一个参数匹配。即使那些匹配“Default”的链接也会匹配“Default2”,因此您应该使用OrderId和CustomerId(或者至少OrderId – Buildstarted 2011-05-16 20:20:44

+0

当您使用Html.ActionLink时,您可以指定要使用的Route Name – 2011-05-16 20:23:35

如果要专门使用的路线,你可以使用HTML辅助Html.RouteLink

<%= Html.RouteLink("my link", "Default2", new {OrderId=1, CustomerId=2}) %> 

此外,您还可以先放第二条路线:最通用的途径应该是在年底,为了只有在没有找到具体路线时才能使用。

订单是非常重要的w/MapRoutes。尝试颠倒这两个语句的顺序。

以及您应该使用不同顺序的路线定义。 顺序应该是更具体的第一少

也是在你的行动链接我要补充的路由参数

其实不是100%是什么OP问,但我需要的是有力地使用特定的一个ActionResult路线。 RedirectToAction总是使用错误的路线。我在RedirectToRoute("RouteName", new { action="Index" })找到它。