2009-04-21 33 views
20

Ho un URL in questo modo:Recupero Anchor link In URL per ASP.Net

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

Sto cercando di vedere se ce n'è l'esistenza del tag di ancoraggio insieme con ottenere il suo valore a fare un po 'di codice logica nel codice sottostante.

Ho cercato di utilizzare il Page.Request, ma nessuna delle proprietà mostra la parte del collegamento di ancoraggio dell'URL.

Ad esempio:

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

Praticamente provato le combinazioni/immobili in questa pagina: http://www.west-wind.com/weblog/posts/269.aspx

Solo per finalizzare questo argomento:

ho copiato l'approccio di StackOverflow con permalink ...: D

risposta

25

Non è possibile recuperare il #anchor dal lato server in ASP.NET

Questo è un flag sul lato client per indicare al browser di spostarsi in un punto specifico all'interno della pagina.

È possibile utilizzare alcuni Javascript nell'evento onLoad del corpo per verificare la presenza di un ancoraggio e inviarlo al server utilizzando 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

In js è più chiaro usare location.hash per accedere alla parte hash di un url – Raulucco

15

Essere più esplicita, il tag di ancoraggio non viene mai inviato come parte della richiesta HTTP da qualsiasi browser, viene interpretato solo localmente all'interno del browser. Né ASP.NET né alcuna altra tecnologia server Web, Microsoft o altro vedranno l'ancora su tale richiesta.

RFC 1808
Sezione 2.4.1 - "Si noti che l'identificatore di frammento non è considerato parte dell'URL."

Come altri hanno suggerito il più vicino si potrebbe ottenere sarebbe utilizzare lato client per leggere la posizione della finestra del browser.

+0

Bene, non hai completamente ragione. Vedi: [http://www.php.net/manual/en/function .parse-url.php] –

+11

Miky solo perché qualcuno ha scritto un pezzo di codice per analizzare gli ancore dagli URL - ancora non significa che sia stato inviato da qualsiasi browser sul filo. Provalo: usa il tuo monitor di rete preferito per guardare il cavo. Non vedrai alcun ancoraggio nella richiesta HTTP. – stephbu

6

Un frammento può essere analizzato da un URL in C# nel seguente modo:

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

C'è un problema però in quanto il navigatore non invierà i frammenti al server. Se ricevi richieste da un servizio che include queste informazioni nella richiesta, sarà disponibile anche dal lato server.

+0

Questo non risponde alla domanda.Un frammento può essere "acceduto" ma ciò non aiuta l'OP, poiché desiderava accedere al frammento inviato con la richiesta. Ma come tutti sappiamo, questo è impossibile, dal momento che non viene mai inviato con una richiesta al server. L'unico scopo di "accedervi" sarebbe se lo aveste già impostato. –

+0

In questo caso non funziona, ma a volte l'url può essere inviato al server non solo tramite browser e in questo caso aiuta a estrarre il frammento tramite BCL. –