2009-12-17 3 views
7

J'ai une question concernant RouteLink vs. ActionLink.Pourquoi RouteLink génère-t-il une URL conviviale, contrairement à ActionLink?

Tenir compte de l'itinéraire suivant

routes.MapRoute("Routename1", 
    "{someEnum}/SpecificAction/{id}/{stringId}", 
    new { controller = "MyController", id = (int?)null, stringId= (string)null, action = "SpecificAction" }, 
    new { someEnum= "(EnumVal1|EnumVal2)" } 
); 

La partie bizarre {} SomeEnum est parce que j'utilise un contrôleur général pour toutes les valeurs d'un ENUM qui forment la partie du contrôleur typique d'une URL. Par exemple,/EnumVal1/Action/et/EnumVal2/Action/utilisez le même contrôleur. Cela ne fait pas partie du problème, cependant.

Tenir compte des deux façons de relier suivantes:

<%=Html.RouteLink("Click me","Routename1", new { id = 32, stringId = "Yatzy" })%> 
<%=Html.ActionLink("Click me", "SpecificAction", "EnumVal1", new { id = 32, stringId = "Yatsy" }, null)%> 

Le RouteLink génère l'URL correcte, ce qui serait/EnumVal1/SpecificAction/32/Yatzy

Le ActionLink génère une URL qui ressemble à/EnumVal1/SpecificAction/32? StringId = Yatzy

Pourquoi est-ce? Quelqu'un pourrait-il m'expliquer cela, s'il vous plaît?

Répondre

4

can only ever use the one route you specify. ActionLink utilisera la première route correspondante, que ce soit celle que vous vouliez ou non. Vos deux exemples correspondent probablement à différentes routes.

Phil Haack's routing debugger aider à clarifier cela.

+0

Salut. C'était aussi ma première pensée, mais quand j'ai entré l'URL donnée dans l'outil de débogage, par exemple:/EnumVal1/SpecificAction/32/Yatzy, - il correspond au même chemin que j'utilise pour RouteLink (C'est aussi la seule route qui correspond). – Terje

+0

Vous confondez l'analyse d'URL avec la génération de liens. Ils sont deux côtés différents de la pièce de routage. Cette analyse d'URL ne signifie pas que la génération de "ActionLink" correspondra également à la route que vous attendez. –

+0

Oh. Comment utiliser le débogueur de routage pour voir le bon côté de la pièce? :) – Terje

Questions connexes