Pregunta

En un sitio de ASP.NET MVC (Beta) que estoy desarrollando, a veces las llamadas a ActionLink me devuelven las URL que contienen cadenas de consulta. He aislado las circunstancias que producen este comportamiento, pero aún no entiendo por qué, en lugar de producir una URL limpia, decide utilizar un parámetro de cadena de consulta. Sé que funcionalmente son iguales, pero para la coherencia (y apariencia) de las URL, esto no es lo que quiero.

Aquí están mis rutas:

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

Ahora, el problema solo se produce cuando estoy mirando la vista descrita por la ruta llamada " Fotos etiquetadas " y ejecuta ActionLink a través de:

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

Que produce la URL:

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

Desde cualquier otra vista, la URL producida es:

http://domain/group/GROUPNAME

He derribado el Depurador de enrutamiento de ASP.NET de Phil , y todo aparece en orden. Este me ha dejado perplejo. ¿Alguna idea?

¿Fue útil?

Solución

No estoy seguro de por qué las diferentes vistas producen diferentes URL.

Pero puede deshacerse de ese parámetro sortBy asignando un valor predeterminado a la primera ruta.

nuevo {sortBy = " " }

Durante la generación, si sortBy coincide con el valor predeterminado, el motor de ruta omitirá ese parámetro (si está en la cadena de consulta).

Otros consejos

Tendrás que usar rutas con nombre aquí, no rutas de acción, debido a la forma en que funciona el enrutamiento en ASP.NET, ya que "primera coincidencia " ;, no " mejor coincidencia " ;.

Creo que es recoger tu primera Ruta. También tiene la acción Todos. Y debido a que el ordenamiento no está especificado, lo está exponiendo como un parámetro de cadena de consulta

Esto todavía funcionará con el método de acción 'Todo' en el controlador de fotos, porque solo llena el parámetro sortby con el valor de la cadena de consulta.

En el Depurador de ruta, ¿está ejecutando la tercera ruta o la primera?

Licenciado bajo: CC-BY-SA con atribución
No afiliado a StackOverflow
scroll top