2009-12-17 5 views
7

Ich habe eine Frage bezüglich RouteLink vs. ActionLink.Warum generiert RouteLink eine freundliche URL, während ActionLink dies nicht tut?

Betrachten Sie die folgende Route

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

Die seltsame {SomeEnum} Teil ist, weil ich eine allgemeine Steuerung für alle Werte eines Aufzählungs verwenden, die den typischen Controller Teil einer URL bilden. Zum Beispiel verwenden/EnumVal1/Action/und/EnumVal2/Action/denselben Controller. Das ist jedoch kein Teil des Problems.

Betrachten Sie die folgenden zwei Möglichkeiten zur Verknüpfung:

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

Die Routelink die richtige URL erzeugt, die/EnumVal1/SpecificAction/32/Knobeln

Die Action erzeugt eine URL sein würde, die wie folgt aussieht/EnumVal1/SpecificAction/32? StringId = Yatzy

Warum ist das? Könnte mir bitte jemand das erklären?

Antwort

4

RouteLinkcan only ever use the one route you specify. ActionLink verwendet die erste übereinstimmende Route, unabhängig davon, ob Sie die gewünschte Route gewählt haben oder nicht. Ihre beiden Beispiele entsprechen wahrscheinlich verschiedenen Routen.

Phil Haack's routing debugger würde helfen, dies zu klären.

+0

Hallo. Das war auch mein erster Gedanke, aber als ich die angegebene URL in das debugtool eingegeben habe, zum Beispiel:/EnumVal1/SpecificAction/32/Yatzy, - stimmt es mit der gleichen Route überein, die ich für RouteLink verwende (es ist auch die einzige passende Route)). – Terje

+0

Sie verwechseln URL-Parsing mit Link-Generierung. Sie sind zwei verschiedene Seiten der Routing-Münze. Dieses URL-Parsing bedeutet nicht, dass die 'ActionLink'-Generierung auch mit der Route übereinstimmt, die Sie erwarten. –

+0

Oh. Wie würde ich den Routing-Debugger verwenden, um die rechte Seite der Münze zu sehen? :) – Terje