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?
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
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. –
Oh. Wie würde ich den Routing-Debugger verwenden, um die rechte Seite der Münze zu sehen? :) – Terje