2008-10-22 5 views
8

Auf einer ASP.NET MVC (Beta) -Site, die ich gerade entwickle, rufen manchmal Aufrufe von ActionLink URLs zurück, die Abfragezeichenfolgen enthalten. Ich habe die Umstände isoliert, die dieses Verhalten hervorbringen, aber ich verstehe immer noch nicht, warum, statt eine saubere URL zu erzeugen, sie sich dafür entscheidet, einen Abfrage-String-Parameter zu verwenden. Ich weiß, dass sie funktional gleich sind, aber aus Gründen der Konsistenz (und des Aussehens) der URLs ist das nicht das, was ich möchte.Warum die Abfragezeichenfolgen in meiner ASP.NET MVC-Route?

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 nur das Problem tritt auf, wenn ich in der Ansicht von der „Tagged Fotos“ und führen Action über benannte Route beschrieben Suche:

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

Welche produziert die URL:

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

Von jeder anderen Ansicht die URL produziert wird:

http://domain/group/GROUPNAME 

Ich habe Phil ASP.NET Routing Debugger heruntergezogen, und alles erscheint in der Reihenfolge. Dieser hat mich ratlos gemacht. Irgendwelche Ideen?

Antwort

3

Nicht sicher, warum verschiedene Ansichten unterschiedliche URLs produzieren.

Sie können diesen sortBy-Parameter jedoch loswerden, indem Sie der ersten Route einen Standardwert zuweisen.

neuer {sortBy = ""}

Bei der Generierung wenn sortBy den Standardeinstimmt, wird die Route Motor diese Parameter überspringt (wenn es in dem Query-String ist).

+0

Ah, ich habe übersehen, dass im Route Debugger die URL der Abfragezeichenfolge diese erste Route ausgeführt hat. Das Hinzufügen der SortBy = "" zu den Voreinstellungen der ersten Route löst es in diesem Fall, aber habe ich nicht das gleiche Problem Wenn ich später versuche, nach etwas Bestimmtem zu sortieren? Entferne ich einfach diese erste Route? –

+0

Wenn Sie einen anderen Wert für sortBy angeben, wird der Parameter sortBy = blah querystring hinzugefügt. – CVertex

0

Ich denke, es ist Ihre erste Route abholen. Es hat auch die Aktion Alle. Und da das sortby nicht angegeben ist, wird es als Querystring-Parameter dargestellt

Dies funktioniert immer noch mit der Aktionsmethode 'All' auf dem PhotosController, weil es nur den Parameter sortby mit dem Query-String-Wert füllt.

Im Route Debugger wird die 3. Route oder die 1. Route ausgeführt?

2

Sie werden hier benannte Routen verwenden müssen, keine Aktionsrouten, da Routing in ASP.NET funktioniert, da es "first match", nicht "best match", gibt.

Verwandte Themen