Cómo forzar un enlace para usar una ruta específica (enrutamiento MVC)

Tengo estas dos rutas:

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
        );

y desea crear un enlace que utilice la segunda ruta.

¿Cómo puedo hacer esto?

preguntado el 16 de mayo de 11 a las 20:05

Probablemente debería invertir esos dos, ya que los dos segundos parámetros son opcionales (lo mismo que el parámetro id anterior) y la primera URL siempre coincidirá primero. Incluso entonces, cualquier enlace que coincida con el "Predeterminado" también coincidirá con el "Predeterminado2", por lo que probablemente debería hacer que OrderId y CustomerId sean obligatorios (o al menos OrderId -

cuando usa Html.ActionLink, puede especificar el nombre de la ruta a usar:

4 Respuestas

Si desea usar específicamente una ruta, puede usar el ayudante Html Html.RouteLink :

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

Además, puede poner la segunda ruta primero: la ruta más genérica debe estar al final, para que se use solo cuando no se haya encontrado una ruta específica.

contestado el 17 de mayo de 11 a las 00:05

El orden es muy importante con MapRoutes. Intente invertir el orden de esas dos declaraciones.

contestado el 17 de mayo de 11 a las 00:05

También debe utilizar la definición de rutas en un orden diferente. el orden debe ser más específico primero a menos

también en sus enlaces de acción agregaría parámetros de enrutamiento

contestado el 17 de mayo de 11 a las 03:05

En realidad, no al 100% de lo que pidió el OP, pero lo que necesitaba era un ActionResult que usara con fuerza una ruta específica. RedirectToAction siempre usó la ruta incorrecta. Lo encontré en RedirectToRoute("RouteName", new { action="Index" }).

contestado el 07 de mayo de 15 a las 21:05

No es la respuesta que estás buscando? Examinar otras preguntas etiquetadas or haz tu propia pregunta.