Perché RouteLink generare URL amichevole mentre ActionLink non lo fa?
-
20-09-2019 - |
Domanda
Ho una domanda per quanto riguarda RouteLink vs. ActionLink.
Si consideri il seguente percorso
routes.MapRoute("Routename1",
"{someEnum}/SpecificAction/{id}/{stringId}",
new { controller = "MyController", id = (int?)null, stringId= (string)null, action = "SpecificAction" },
new { someEnum= "(EnumVal1|EnumVal2)" }
);
La parte strana {} someEnum è perché io uso un regolatore generale per tutti i valori di un enum che formano la parte tipica di controllo di un URL. Ad esempio, / EnumVal1 / Azione / e / EnumVal2 / Azione / utilizzare lo stesso controller. Questo non è parte del problema, tuttavia.
Si considerino i seguenti due modi di collegamento:
<%=Html.RouteLink("Click me","Routename1", new { id = 32, stringId = "Yatzy" })%>
<%=Html.ActionLink("Click me", "SpecificAction", "EnumVal1", new { id = 32, stringId = "Yatsy" }, null)%>
Il RouteLink genera l'URL corretto, il che sarebbe / EnumVal1 / SpecificAction / 32 / Yatzy
L'ActionLink genera un URL che assomiglia a / EnumVal1 / SpecificAction / 32? StringID = Yatzy
Perché è questo? qualcuno potrebbe spiegare questo a me, per favore.
Soluzione
RouteLink href="http://blogs.teamb.com/craigstuntz/2009/03/18/38085/" rel="nofollow noreferrer"> può sempre e solo utilizzare quello percorso specificato . ActionLink
utilizzerà il primo percorso corrispondente, che si tratti di quella desiderata oppure no. I suoi due esempi sono probabilmente abbinando percorsi diversi.
debugger di routing di Phil Haack avrebbe aiutato a chiarire questo.