c# - solicitar - multiples vistas en la misma pagina mvc
¿Por qué la consulta se ejecuta en mi ruta ASP.NET MVC? (3)
Creo que está recogiendo tu primera ruta. También tiene la acción Todo. Y debido a que Sortby no está especificado, lo está exponiendo como un parámetro querystring
Esto seguirá funcionando con el método de acción ''Todos'' en PhotosController, ya que simplemente rellena el parámetro sortby con el valor de la cadena de consulta.
¿En Route Depurador está ejecutando la 3ra ruta o la 1ra?
En un sitio ASP.NET MVC (Beta) que estoy desarrollando, a veces las llamadas a ActionLink me devolverán las URL que contienen cadenas de consulta. He aislado las circunstancias que producen este comportamiento, pero todavía no entiendo por qué, en lugar de generar una URL limpia, decide usar un parámetro de cadena de consulta. Sé que funcionalmente son lo mismo, pero para la consistencia (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 ocurre cuando estoy mirando la vista descrita por la ruta llamada "Fotos etiquetadas" y ejecuto 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
Bajé el ASP.NET Routing Debugger de Phil, y todo parece estar en orden. Este me tiene perplejo. ¿Algunas ideas?
No estoy seguro de por qué diferentes vistas producen diferentes URL.
Pero puedes deshacerte de ese tipo de paralaje 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).
Tendrá que usar rutas con nombre aquí, no rutas de acción, debido a la forma en que el enrutamiento funciona en ASP.NET, ya que hace "primera coincidencia", no "mejor coincidencia".