Wiem, że po stronie klienta (javascript) możesz użyć windows.location.hash, ale i tak nie możesz znaleźć dostępu od strony serwera.
Wiem, że po stronie klienta (javascript) możesz użyć windows.location.hash, ale i tak nie możesz znaleźć dostępu od strony serwera.
Odpowiedzi:
Mieliśmy sytuację, w której musieliśmy zachować skrót adresu URL w postach zwrotnych ASP.Net. Ponieważ przeglądarka domyślnie nie wysyła skrótu na serwer, jedynym sposobem na to jest użycie JavaScript:
Kiedy formularz zostanie przesłany, pobierz hash ( window.location.hash
) i zapisz go w ukrytym polu wejściowym po stronie serwera. Umieść to w DIV z identyfikatorem „ urlhash
”, abyśmy mogli go później łatwo znaleźć.
Na serwerze możesz użyć tej wartości, jeśli chcesz coś z tym zrobić. Możesz go nawet zmienić, jeśli zajdzie taka potrzeba.
Podczas ładowania strony na kliencie sprawdź wartość tego ukrytego pola. Będziesz chciał go znaleźć przez DIV, w którym jest zawarty, ponieważ automatycznie wygenerowany identyfikator nie będzie znany. Tak, możesz zrobić tutaj trochę oszustwa z .ClientID, ale okazało się, że prostsze jest po prostu użycie opakowania DIV, ponieważ pozwala on całemu JavaScriptowi żyć w zewnętrznym pliku i być używany w sposób ogólny.
Jeśli ukryte pole wejściowe ma prawidłową wartość, ustaw ją jako skrót adresu URL ( window.location.hash again
) i / lub wykonaj inne czynności.
Użyliśmy jQuery, aby uprościć wybór pola, itp ... w sumie kończy się to na kilku wywołaniach jQuery, jednym do zapisania wartości, a drugim do jej przywrócenia.
Przed przesłaniem:
$("form").submit(function() {
$("input", "#urlhash").val(window.location.hash);
});
Po załadowaniu strony:
var hashVal = $("input", "#urlhash").val();
if (IsHashValid(hashVal)) {
window.location.hash = hashVal;
}
IsHashValid()
może sprawdzić „ undefined
” lub inne rzeczy, którymi nie chcesz się zajmować.
Oczywiście upewnij się, że używasz $(document).ready()
odpowiednio.
RFC 2396 sekcja 4.1:
Gdy odniesienie URI jest używane do wykonywania operacji pobierania na zidentyfikowanym zasobie, opcjonalny identyfikator fragmentu, oddzielony od URI znakiem krzyżyka („#”), składa się z dodatkowych informacji odniesienia, które mają być zinterpretowane przez klienta użytkownika po pobraniu akcja została pomyślnie zakończona . W związku z tym nie jest częścią identyfikatora URI, ale często jest używany w połączeniu z identyfikatorem URI.
(podkreślenie dodane)
To dlatego, że przeglądarka nie przesyła tej części na serwer, przepraszam.
Prawdopodobnie jedynym wyjściem jest odczytanie go po stronie klienta i ręczne przeniesienie na serwer (GET / POST / AJAX). Pozdrawiam Artur
Możesz również zobaczyć, jak grać za pomocą przycisku Wstecz i historii przeglądarki w Malcan
Aby wykluczyć możliwość, że w rzeczywistości nie próbujesz zobaczyć fragmentu w GET / POST i naprawdę chcesz wiedzieć, jak uzyskać dostęp do tej części obiektu URI, którą masz w kodzie po stronie serwera, znajduje się ona w Uri. ( Dokumentacja MSDN ).
Możliwe rozwiązanie dla żądań GET:
Nowy format linku: http://example.com/yourDirectory?hash=video01
Wywołaj tę funkcję w kierunku górnej części kontrolera lub http://example.com/yourDirectory/index.php
:
function redirect()
{
if (!empty($_GET['hash'])) {
/** Sanitize & Validate $_GET['hash']
If valid return string
If invalid: return empty or false
******************************************************/
$validHash = sanitizeAndValidateHashFunction($_GET['hash']);
if (!empty($validHash)) {
$url = './#' . $validHash;
} else {
$url = '/your404page.php';
}
header("Location: $url");
}
}