2009-04-21 7 views
20

Mam url tak:Pobieranie Kotwica ogniwem URL dla ASP.NET

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

próbuję zobaczyć, czy jest tam istnienie znacznika kotwicy wraz z coraz to wartość zrobić jakiś kod logika w kodzie za.

Próbowałem użyć polecenia Page.Request, ale żadna z właściwości nie pokazuje części adresu URL odnośnika.

Na przykład:

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

Dość dużo próbowałem kombinacji/właściwości na tej stronie: http://www.west-wind.com/weblog/posts/269.aspx

Wystarczy, aby sfinalizować ten temat:

skopiowane podejście StackOverflow jest z permalink ...: D

Odpowiedz

25

To nie jest możliwe, aby pobrać #anchor od strony serwera w ASP.NET

Jest to flaga po stronie klienta, która informuje przeglądarkę, aby przejść do określonego miejsca na stronie.

Możesz użyć JavaScriptu w zdarzeniu bodyLoad, aby sprawdzić kotwicę i wysłać ją z powrotem do serwera przy użyciu 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

W js jest bardziej przejrzysty w użyciu location.hash, aby uzyskać dostęp do części hash adresu URL – Raulucco

15

Będąc bardziej wyraźne, znacznik kotwica nigdy nie jest wysyłane jako część żądania HTTP przez dowolną przeglądarkę, to jest interpretowane tylko lokalnie w przeglądarce. Ani program ASP.NET, ani żadna inna technologia serwera WWW, Microsoft ani w żaden inny sposób nie uznają tego za kotwicę.

RFC 1808
Sekcja 2.4.1 - "Zauważ, że identyfikator fragment nie jest uważany za część adresu URL."

Zgodnie z sugestią innych osób najbliższym możliwym do uzyskania byłoby użycie strony klienta do odczytu położenia okna przeglądarki.

+0

Cóż, nie masz absolutnie racji .. Zobacz: [http://www.php.net/manual/en/function .parse-url.php] –

+11

Miky, tylko dlatego, że ktoś napisał fragment kodu do analizy zakotwiczeń z adresów URL - nadal nie oznacza, że ​​jest wysyłany przez dowolną przeglądarkę przez przewód. Wypróbuj - użyj ulubionego monitora sieciowego, aby obejrzeć przewód. Nie zobaczysz żadnej kotwicy w żądaniu HTTP. – stephbu

6

Fragment może być analizowany z URL w C# w następujący sposób:

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

Jest jednak problem, że przeglądarka nie wyśle ​​fragmenty z serwerem. Jeśli otrzymasz żądania od usługi, która zawiera te informacje w żądaniu, będzie ona dostępna również po stronie serwera.

+0

To nie odpowiada na pytanie.Fragment można "uzyskać dostęp", ale to nie pomaga OP, ponieważ chcieli uzyskać dostęp do fragmentu wysłanego wraz z żądaniem. Ale jak wszyscy wiemy, jest to niemożliwe, ponieważ nigdy nie jest wysyłane z prośbą do serwera. Jedynym celem "dostępu" byłoby, gdybyś już to ustawił. –

+0

W tym przypadku nie działa, ale czasami adres URL może być wysyłany do serwera nie tylko za pośrednictwem przeglądarki, w tym przypadku wiedza, jak wyodrębnić fragment za pomocą BCL pomaga. –