2009-06-09 8 views
40

J'ai une page routée comme /Comments/Search/3 où je recherche et affiche tous les commentaires du fil "3".ASP.NET MVC: routage url vs querystring

J'ajoute une fonction de tri (par date, auteur, etc). Quelle est la meilleure façon de le gérer? /Comments/Search/3/Sort/Author ou /Comments/Search/3?sort=author? Comment gérer automatiquement la chaîne de requête querystring = en tant que paramètre dans MVC?

Merci

Répondre

57

Je préfère:/Comments/Search/3? Sort = author. La chaîne de requête est un bon endroit pour transmettre des paramètres programmatiques, en particulier si le paramètre (comme dans ce cas) n'est pas important à des fins de référencement. Si le paramètre avait une signification sémantique comme terme de recherche, la première URL serait meilleure.

Dans un procédé de commande vous pouvez utiliser quelque chose comme ceci:

public ActionResult Search(int id, string sort) 

ASP.NET MVC câbler automatiquement les valeurs querystring aux paramètres de votre méthode.

Utilisez le itinéraire suivant

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

/Commentaires/Recherche/3? Type = auteur appellera Recherche (3, "auteur")

/Commentaires/Recherche/3 appellera Recherche (3 , null)

Gardez à l'esprit que id est obligatoire si cette URL échouera: /Commentaires/Recherche

+0

Je pense que je vais pour cette solution. Comment puis-je l'acheminer et définir une valeur par défaut, comme le sort = 3 est facultatif? – pistacchio

+0

En raison de la convention sur la configuration, gardez à l'esprit que vos paramètres pour votre méthode DOIVENT être appelés respectivement 'id' et 'sort'. –

+2

Dans MVC 2, vous pouvez utiliser UrlParameter.Optional et dans le paramètre action 'int? id' au lieu de 'int id' si vous voulez que ce soit optionnel et'/Comments/Search' pour afficher l'interface de recherche par défaut avec un texte d'entrée vide. – CallMeLaNN

19

ASP.NET MVC se chargera automatiquement que dans le cas de chaîne de requête. Vous venez d'ajouter un paramètre string sort à votre action.

Quel est le meilleur? Personnellement, j'utilise le chemin pour contrôler le contenu étant affiché et querystring pour contrôler la présentation (comment il est affiché, formaté, ...). Donc, pour le tri, j'irais avec la méthode querystring. Mais je ne pense pas qu'il y ait un désavantage technique dans les deux approches.