2009-06-09 20 views
40

Tengo una página enrutada como /Comments/Search/3 donde busco y visualizo todos los comentarios del tema "3".ASP.NET MVC: url routing vs querystring

Estoy agregando una función de ordenación (por fecha, autor, etc.). ¿Cuál es la mejor manera de manejarlo? /Comments/Search/3/Sort/Author o /Comments/Search/3?sort=author?

¿Cómo manejo automáticamente la clase querystring = author como parámetro en MVC?

Gracias

Respuesta

57

Prefiero:/Comentarios/Buscar/3? Sort = autor. La cadena de consulta es un buen lugar para pasar parámetros programáticos, especialmente si el parámetro (como en este caso) no es importante para fines de SEO. Si el parámetro tiene algún significado semántico como término de búsqueda, la primera URL sería mejor.

En un método de control se puede usar algo como esto:

public ActionResult Search(int id, string sort) 

ASP.NET MVC conectar automáticamente querystring valores a los parámetros de su método.

Usar la siguiente ruta

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

/Comentarios/search/3? Sort = autor llamará Búsqueda (3, "autor")

/Comentarios/Buscador/3 llamarán Búsqueda (3 , null)

Tenga en cuenta que la identificación es obligatoria por lo que esta url fallará: /Comentarios/Buscar

+0

Creo que me gustaría ir para esta solución. ¿Cómo lo ruteo y configuro un valor predeterminado, ya que sort = 3 es opcional? – pistacchio

+0

Debido a la convención sobre la configuración, tenga en cuenta que sus parámetros para su método DEBEN llamarse 'id' y 'sort' respectivamente. –

+2

En MVC 2 puede usar UrlParameter.Optional y en el parámetro de acción usar 'int? id' en lugar de 'int id' si desea que sea opcional y'/Comments/Search' para mostrar la interfaz de usuario de búsqueda predeterminada con texto de entrada vacío. – CallMeLaNN

19

ASP.NET MVC se encargará de que de forma automática en el caso de la cadena de consulta. Solo agrega un parámetro string sort a su acción.

Cual es mejor? Personalmente, utilizo la ruta para controlar contenidos que se muestran y querystring para controlar la presentación (cómo se muestra, formateado, ...). Entonces, para ordenar, iría con el método de la querystring. Pero no creo que haya una desventaja técnica en ninguno de los enfoques.