Warum Routelink freundliche URL generiert, während Action nicht?
-
20-09-2019 - |
Frage
Ich habe eine Frage bezüglich Routelink vs. Action.
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)" }
);
Der 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 / EnumVal1 / Action / und / EnumVal2 / Action / verwenden die gleichen Controller. Das ist nicht Teil des Problems, aber.
Beachten 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)%>
Der Routelink generiert die richtige URL, die / wäre EnumVal1 / SpecificAction / 32 / Knobeln
Die Action erzeugt eine URL, das aussieht wie / EnumVal1 / SpecificAction / 32? StringID = Knobeln
Warum ist das? Könnte jemand mir dies erklären, bitte.
Lösung
RouteLink href="http://blogs.teamb.com/craigstuntz/2009/03/18/38085/" rel="nofollow noreferrer"> kann immer nur verwenden, um die eine Route, die Sie angeben . ActionLink
wird die erste passende Route verwenden, ob es derjenige ist, Sie oder nicht beabsichtigt. Ihre zwei Beispiele passen wahrscheinlich verschiedene Routen.
Phil Haack Routing-Debugger würde helfen, klären dies.