Domanda

Su un sito ASP.NET MVC (Beta) che sto sviluppando a volte le chiamate ad ActionLink mi restituiranno URL contenenti stringhe di query. Ho isolato le circostanze che producono questo comportamento, ma ancora non capisco perché, invece di produrre un URL pulito, decide di utilizzare un parametro della stringa di query. So che funzionalmente sono uguali, ma per coerenza (e aspetto) degli URL questo non è quello che voglio.

Ecco i miei percorsi:

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 = ""});

Ora il problema si verifica solo quando guardo la vista descritta dalla rotta denominata " Foto con tag " ed esegui ActionLink tramite:

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

Che produce l'URL:

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

Da qualsiasi altra vista l'URL prodotto è:

http://domain/group/GROUPNAME

Ho eliminato Phil ASP.NET Routing Debugger e tutto appare in ordine. Questo mi ha lasciato perplesso. Qualche idea?

È stato utile?

Soluzione

Non so perché visualizzazioni diverse producano URL diversi.

Ma puoi sbarazzarti di quel parametro SortB assegnando un valore predefinito alla prima rotta.

new {sortBy = " " }

Durante la generazione, se sortBy corrisponde al valore predefinito, il motore di route salterà quel parametro (se si trova nella stringa di query).

Altri suggerimenti

Dovrai utilizzare le route con nome qui, non le route di azione, a causa del modo in cui il routing funziona in ASP.NET, perché "corrisponde prima", non "trova la migliore corrispondenza".

Penso che stia raccogliendo il tuo primo percorso. Anche questo ha l'azione Tutto. E poiché l'ordinamento non è specificato, lo sta esponendo come parametro querystring

Funzionerà comunque con il metodo di azione "All" su PhotosController, perché riempie il parametro sortby con il valore della stringa di query.

Nel Route Debugger sta eseguendo il 3 ° percorso o il 1 °?

Autorizzato sotto: CC-BY-SA insieme a attribuzione
Non affiliato a StackOverflow
scroll top