2009-06-09 4 views
40

Ho una pagina instradata come /Comments/Search/3 dove cerco e visualizzo tutti i commenti del thread "3".ASP.NET MVC: routing url vs querystring

Sto aggiungendo una funzione di ordinamento (per data, autore ecc.). Qual è il modo migliore per gestirlo? /Comments/Search/3/Sort/Author o /Comments/Search/3?sort=author?

Come si gestisce automaticamente l'ordinamento querystring = autore come parametro in MVC?

Grazie

risposta

57

Preferisco:/Commenti/Cerca/3? Sort = autore. La querystring è un buon posto per passare in parametri programmatici, specialmente se il parametro (come in questo caso) non è importante ai fini SEO. Se il parametro avesse un significato semantico come termine di ricerca, il primo URL sarebbe migliore.

In un metodo di controllo si può usare qualcosa di simile:

public ActionResult Search(int id, string sort) 

ASP.NET MVC accrediterà automaticamente querystring valori ai parametri del vostro metodo.

Utilizza il seguente percorso

routes.MapRoute(
        "Default",            // Route name 
        "{controller}/{action}/{id}",       // URL with parameters 
        new { controller = "Comments", action = "Search", id = "" } // Parameter defaults 
       ); 

/commenti/Ricerca/3? Sort = autore chiamerà Ricerca (3, "autore")

/Commenti/Ricerca/3 chiamerà Ricerca (3 , null)

Tenete a mente che id è obbligatorio quindi questo url fallirà: /commenti/Ricerca

+0

Credo che mi piacerebbe andare per questa soluzione. Come posso instradarlo e impostare un valore predefinito, in quanto sort = 3 è opzionale? – pistacchio

+0

A causa della convenzione sulla configurazione, tieni presente che i tuoi parametri per il tuo metodo DEVONO essere chiamati rispettivamente "id" e "sort". –

+2

In MVC 2 è possibile utilizzare UrlParameter.Optional e nel parametro action usare 'int? id' invece di 'int id' se vuoi che sia facoltativo e'/Comments/Search' per mostrare l'interfaccia utente di ricerca predefinita con testo di input vuoto. – CallMeLaNN

19

ASP.NET MVC che gestirà automaticamente nel caso stringa di query. Devi solo aggiungere un parametro string sort alla tua azione.

Quale è meglio? Personalmente, utilizzo il percorso per controllare il contenuto e la querystring per controllare la presentazione (come viene visualizzata, formattata, ...). Quindi, per l'ordinamento, sceglierei il metodo querystring. Ma non penso che ci sia uno svantaggio tecnico in entrambi gli approcci.