Frage

Auf einer ASP.NET -MVC (Beta) -Seite, die ich manchmal entwickle, kehrt manchmal Aufrufe zum ActionLink zurück zu mir URLs mit Abfragesteichen. Ich habe die Umstände isoliert, die dieses Verhalten erzeugen, aber ich verstehe immer noch nicht, warum sie, anstatt eine saubere URL zu erzeugen, beschließt, einen Parameter für Abfragen zu verwenden. Ich weiß, dass sie funktionell gleich sind, aber für die Konsistenz (und das Aussehen) der URLs ist dies nicht das, was ich will.

Hier sind meine Routen:

routes.MapRoute(
    "Photo Gallery Shortcut",
    "group/{groupname}",
    new { controller = "Photos", action = "All", Id = "" });

routes.MapRoute(
    "Tagged Photos", //since the Tagged action takes an extra parameter, put it first
    "group/{groupname}/Photos/Tagged/{tagname}/{sortby}",
    new { controller = "Photos", action = "Tagged", Id = "", SortBy = "" });

routes.MapRoute(
    "Photo Gallery", //since the Gallery's defualt action is "All" not "Index" its listed seperatly
    "group/{groupname}/Photos/{action}/{sortby}",
    new { controller = "Photos", action = "All", Id = "", SortBy = "" });

routes.MapRoute(
    "Group",  //<-- "Group" Category defined above
    "group/{groupname}/{controller}/{action}/{id}",
    new {controller = "Photos", action = "Index", Id = ""});

Jetzt tritt das Problem nur auf, wenn ich mir die Ansicht anschaue, die von der Route mit dem Namen "Tagged Fotos" beschrieben wurde, und ActionLink über:

Html.ActionLink<PhotosController>(p => p.All((string)ViewData["group"], ""), "Home")

Das produziert die URL:

http://domain/group/GROUPNAME?sortBy=

Aus jeder anderen Ansicht ist die produzierte URL:

http://domain/group/GROUPNAME

Ich habe Phil's heruntergezogen ASP.NET Routing -Debugger, und alles erscheint in Ordnung. Dieser hat mich verblüfft. Irgendwelche Ideen?

War es hilfreich?

Lösung

Ich bin mir nicht sicher, warum verschiedene Ansichten unterschiedliche URLs erzeugen.

Sie können diesen Sortby -Param jedoch entfernen, indem Sie der ersten Route einen Standardwert zuweisen.

neu {sortby = ""}

Wenn Sortby während der Generation mit der Standardeinstellung übereinstimmt, überspringt die Routenmotor diesen Parameter (falls er sich in der Abfragezeichenfolge befindet).

Andere Tipps

Sie müssen hier benannte Routen verwenden, nicht Aktionsrouten, weil das Routing in ASP.NET funktioniert, da es "erstes Match" und nicht "bestes Match" erfolgt.

Ich denke, es nimmt Ihre erste Route auf. Es hat auch die Aktion alle. Und weil der Sortby nicht angegeben ist, dass er ihn als QueryString -Parameter freigibt

Dies funktioniert weiterhin mit der Aktionsmethode "All" auf dem PhotosController, da er nur den Sortby -Parameter mit dem Wert der Abfrage -Zeichenfolge füllt.

In der Routendebugger führt es die 3. Route oder die 1. aus?

Lizenziert unter: CC-BY-SA mit Zuschreibung
Nicht verbunden mit StackOverflow
scroll top