2011-04-06 12 views
47

que necesito para implementar valor hash es decir, la URL debe tener este aspecto:Incluyendo valores hash en las rutas de URL ASP.NET MVC

/home/index/# crear han añadido

Por esta una ruta:

routes.MapRoute(
    "Default", // Route name 
    "{controller}/{action}/#{detail}", // URL with parameters 
    new { controller = "Login", action = "LogIn", detail =""} // Parameter defaults 
); 

al acceder /home/index/#create, me redirecciona a la ruta por defecto.

¿Cómo se puede hacer esto?

+1

Basado en algunas respuestas. Sé con #hash que el navegador no envía una solicitud al servidor PERO eso solo cuando la URL cambia por segunda vez dentro de la misma página. Entonces esta pregunta todavía tiene sentido. ¡Piensa si el usuario marca esta URL como favorito! el #hash puede referirse al comentario de anclaje o representar un menú seleccionado. Sigo buscando la manera correcta de hacer esto en la ruta. – CallMeLaNN

Respuesta

46

No se puede recuperar el valor después del símbolo # en el servidor simplemente porque este valor nunca se envía al servidor. Solo el javascript del lado del cliente tiene acceso a esto, por lo que definir las rutas con hash no tiene mucho sentido.

+11

Tiene sentido. Mi '# hash' solía memorizar el menú seleccionado (no quiero cookies). Cuando el usuario hace clic en un menú, el '#' cambió y la solicitud de AJAX al servidor para actualizar el contenido respectivo. De esta manera, el usuario puede marcar la página con el menú seleccionado Y puede usar el botón Atrás del navegador con '# menuname 'legible. La próxima vez que el usuario navegue con el '#', la página cargada ya tiene el menú seleccionado sin una solicitud AJAX innecesaria. Necesito vincular el valor hash en los datos de la ruta porque cada '#' puede considerarse una página diferente. – CallMeLaNN

+1

Puede usar javascript para enviar esto al servidor como parte de una solicitud de formulario. –

5

Cuando un navegador realiza una solicitud de una URL, no envía nada después de un hash al servidor. Esta ruta puede permitirle generar URL de ruta que contengan el valor hash pero no hay forma de hacer nada en el lado del servidor cuando el usuario navega hacia dicha URL. Así es como funciona la web ...

94

Como se indicó, no hay forma de hacerlo mediante el enrutamiento. La única solución posible es agregar el fragmento # a su url al redirigir las acciones de su controlador. P.ej.

return Redirect(Url.Action("Index", "Home") + "#create"); 
+8

IMO esta debería ser la respuesta aceptada. El OP preguntó: "¿Cómo se puede hacer esto?" y esta es la única respuesta que le brinda una solución razonable, en lugar de por qué no puede hacerlo de la forma en que originalmente lo deseaba el OP. –

+1

Acabo de pasar 20 minutos tratando de averiguar cómo hacer un método "return View()" para permitir un parámetro hash, o cualquier otro resultado de acción, esto es perfecto. ¡Buena respuesta! – nocarrier

Cuestiones relacionadas