2009-04-21 5 views
20

que tiene una URL de este modo:Recuperación de la barra de navegación en la URL para ASP.Net

http://localhost/place/663828/bangkok-paradise-restaurant-toronto#r306040

Estoy tratando de ver si theres la existencia de la etiqueta de anclaje, además de hacer su valor para hacer algo de código lógica en el código detrás.

He intentado utilizar la página.Request, pero ninguna de las propiedades muestra la parte del enlace de ancla de la url.

Por ejemplo:

Response.Write (this.Page.Request.RawUrl.ToString());

Prácticamente trataron las combinaciones/propiedades en esta página: http://www.west-wind.com/weblog/posts/269.aspx

Sólo para finalizar este tema:

Copié el enfoque de Stackoverflow con enlace permanente ...: D

Respuesta

25

No es posible recuperar el #anchor desde el lado del servidor en ASP.NET

Esta es una marca del lado del cliente que le indica al navegador que se mueva a un lugar específico dentro de la página.

Puede utilizar algo de Javascript en el cuerpo del evento onLoad para buscar un ancla y enviarla de vuelta al servidor utilizando ajax.

var anchorValue; 
var url = document.location; 
var strippedUrl = url.toString().split("#"); 
if(strippedUrl.Length > 1) 
anchorvalue = strippedUrl[1]; 

ref: http://www.wacdesigns.com/2008/01/16/retrieving-anchor-value-from-url/

+1

En js es más claro usar location.hash para acceder a la parte hash de una url – Raulucco

15

Al ser más explícita, la etiqueta de anclaje no se envía como parte de la petición HTTP mediante cualquier navegador, sólo se interpreta localmente dentro del navegador. Ni ASP.NET ni ninguna otra tecnología de servidor web, Microsoft o de otro modo verán el ancla en esa solicitud.

RFC 1808
Sección 2.4.1 - "Tenga en cuenta que el identificador de fragmento no se considera parte de la URL."

Como otros han sugerido que lo más cercano que podría estar sería utilizar el lado del cliente para leer la ubicación de la ventana del navegador.

+0

Bueno, no está del todo bien .. Ver: [http://www.php.net/manual/en/function .parse-url.php] –

+11

Miky simplemente porque alguien escribió un fragmento de código para analizar los anclajes de las URL, aún no significa que lo envíe cualquier navegador a través del cable. Pruébelo: use su monitor de red favorito para mirar el cable. No verá ningún delimitador en la solicitud HTTP. – stephbu

6

Un fragmento se puede analizar desde una URL en C# de la siguiente manera:

var uri = new Uri("http://localhost?id=2#token=23"); 
var fragment = uri.Fragment; // will return #token=23 

Hay un problema sin embargo, en que el navegadorno enviará fragmentos al servidor. Si recibe solicitudes de un servicio que incluye esta información en la solicitud, también estará disponible desde el lado del servidor.

+0

Esto no responde la pregunta.Se puede "acceder" a un fragmento, pero esto no ayuda al OP, ya que querían acceder al fragmento enviado con la solicitud. Pero como todos sabemos, esto es imposible, ya que nunca se envía con una solicitud al servidor. El único propósito de "acceder" sería si ya lo configuraste. –

+0

En este caso, no funciona, pero a veces la URL se puede enviar al lado del servidor no solo a través del navegador y en ese caso, saber cómo extraer fragmentos a través de BCL ayuda. –

Cuestiones relacionadas