2009-08-28 11 views
9

estoy recibiendo peticiones GET como esto¿Cómo consigo la parte URL después de un "#" de HttpRequestBase

http://localhost/controller/List#SearchGuid=755d259d-e7c9-4c5a-bf2a-69f65f63df8d

y necesito leer el SearchGUID que es según el #. desafortunadamente, la HttpRequestBase parece esconder todo más allá de un #.

¿Alguien sabe cómo podría leer el SearchGuid desde dentro de la acción del controlador?

tia.

+0

¿Por qué "#" y no "?" ? – AnthonyWJones

+0

sed -es/Why/Really/ –

+0

Estoy usando ASP.NET AJAX History para establecer puntos de historia adicionales que es establecer el parámetro adicional para reconstruir la última llamada ajax después de un "#" –

Respuesta

17

No puede, no se envía al servidor.

+2

Déjeme aclarar esto (para que pueda omita la pregunta la próxima vez que aparezca): alguien hace clic en un enlace que contiene un # (lo que significa un ancla, una posición, en una página web). El navegador envía una solicitud GET al servidor que contiene solo la dirección de toda la página, sin anclaje, fragmento ni lo que sea. Cuando el servidor devuelve la página, el navegador sabe dónde ubicarla para que la ubicación del anclaje sea visible. Las otras respuestas mencionan Javascript porque es del lado del cliente y debe tener acceso al ancla. – pavium

+2

sí, eso es correcto – levinalex

2

Puede obtener esa parte en JavaScript en el lado del cliente utilizando window.location.hash, configúrelo en alguna entrada oculta para que se envíen para que también se envíen al servidor.

3

Si desea procesar "fragmentos" de la URL (eso es lo que se llama esas cosas después del '#'), tendrá que hacerlo del lado del cliente. Los fragmentos no se transmiten al servidor.

Rediseñe el protocolo para usar una cadena de consulta (reemplace '#' por '?') O use javascript en el cliente para hacer el procesamiento necesario, que puede incluir hacer una solicitud del servidor que codifica el fragmento en un URI cadena de consulta.

2

'#' El fragmento es accesible solo desde el lado del cliente, sin embargo, la URL que envía IE8 incluye #fragmento.

Puede usar Ajax para que funcione. Algo así como:

var fragment = location.hash; // on page load 
$.get('/yoururl' + '?' + fragment.replace(/^.*#/, '')); 

Será parece que está solicitando # fragmento de URL en el lado del cliente, pero en realidad, solicitará URL fragmento y se puede trabajar con él en el lado del servidor?.

Una cosa que debes recordar es que la página del servidor se solicitará dos veces, así que la segunda (solicitud de Ajax, verifica el encabezado de la solicitud "X-Requested-With = XMLHttpRequest").

P.S. Las aplicaciones de Google usan la misma solución, como veo en Firebug.

Cuestiones relacionadas