2009-12-17 12 views
7

Ho una domanda riguardante RouteLink e ActionLink.Perché RouteLink genera URL amici mentre ActionLink no?

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/Action/e/EnumVal2/Action/utilizzano lo stesso controller. Questo non fa parte del problema, comunque.

considerare le 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 spiegarmelo, per favore.

risposta

4

RouteLinkcan only ever use the one route you specify. ActionLink utilizzerà la prima route corrispondente, indipendentemente dal fatto che sia stata scelta o meno. I tuoi due esempi probabilmente corrispondono a percorsi diversi.

Phil Haack's routing debugger contribuirebbe a chiarire questo.

+0

Ciao. Questo è stato anche il mio pensiero iniziale, ma quando ho inserito l'URL specificato nel debugtool, ad esempio:/EnumVal1/SpecificAction/32/Yatzy, - corrisponde allo stesso percorso che uso per RouteLink (è anche l'unica rotta che corrisponde). – Terje

+0

Stai confondendo l'analisi dell'URL con la generazione di link. Sono due lati diversi della moneta di routing. L'analisi dell'URL funziona non significa che la generazione di 'ActionLink' abbinerà anche la rotta che ci si aspetta. –

+0

Oh. Come dovrei usare il debugger di routing per vedere il lato destro della moneta? :) – Terje

Problemi correlati