¿Por qué RouteLink genera una URL amigable y ActionLink no?
-
20-09-2019 - |
Pregunta
Tengo una pregunta sobre RouteLink vs.Enlace de acción.
Considere la siguiente ruta
routes.MapRoute("Routename1",
"{someEnum}/SpecificAction/{id}/{stringId}",
new { controller = "MyController", id = (int?)null, stringId= (string)null, action = "SpecificAction" },
new { someEnum= "(EnumVal1|EnumVal2)" }
);
La parte extraña de {someEnum} se debe a que uso un controlador general para todos los valores de una enumeración que forman la parte típica del controlador de una URL.Por ejemplo, /EnumVal1/Action/ y /EnumVal2/Action/ usan el mismo controlador.Sin embargo, eso no es parte del problema.
Considere las siguientes dos formas de vinculación:
<%=Html.RouteLink("Click me","Routename1", new { id = 32, stringId = "Yatzy" })%>
<%=Html.ActionLink("Click me", "SpecificAction", "EnumVal1", new { id = 32, stringId = "Yatsy" }, null)%>
RouteLink genera la URL correcta, que sería /EnumVal1/SpecificAction/32/Yatzy
ActionLink genera una URL similar a /EnumVal1/SpecificAction/32?stringId=Yatzy
¿Por qué es esto?Alguien podría explicarme esto, por favor.
Solución
RouteLink href="http://blogs.teamb.com/craigstuntz/2009/03/18/38085/" rel="nofollow noreferrer"> tan sólo puede utilizar la ruta que especifique . ActionLink
utilizará la primera ruta coincidente, si se trata de la persona que intencional o no. Sus dos ejemplos son probablemente coincidentes diferentes rutas.
depurador de enrutamiento de Phil Haack ayudaría a aclarar esto.