Я знаю, что на стороне клиента (javascript) вы можете использовать windows.location.hash, но не можете найти доступ к серверу.
Я знаю, что на стороне клиента (javascript) вы можете использовать windows.location.hash, но не можете найти доступ к серверу.
Ответы:
У нас возникла ситуация, когда нам нужно было сохранить хэш URL-адреса во всех ответвлениях ASP.Net. Поскольку браузер по умолчанию не отправляет хэш на сервер, единственный способ сделать это - использовать Javascript:
Когда форма отправляется, возьмите hash ( window.location.hash
) и сохраните его в скрытом поле ввода на стороне сервера. Поместите это в DIV с идентификатором « urlhash
», чтобы мы могли легко найти его позже.
На сервере вы можете использовать это значение, если вам нужно что-то с ним сделать. Вы даже можете изменить его, если вам нужно.
При загрузке страницы на клиенте проверьте значение этого скрытого поля. Вы захотите найти его по DIV, в котором он содержится, поскольку автоматически сгенерированный идентификатор не будет известен. Да, вы могли бы сделать некоторые хитрости здесь с .ClientID, но мы обнаружили, что проще просто использовать оболочку DIV, поскольку она позволяет всему этому Javascript жить во внешнем файле и использоваться в общем виде.
Если скрытое поле ввода имеет допустимое значение, установите его в качестве URL-адреса hash ( window.location.hash again
) и / или выполните другие действия.
Мы использовали jQuery, чтобы упростить выбор поля и т. Д. ... в итоге получилось несколько вызовов jQuery, один для сохранения значения, а другой для его восстановления.
Перед отправкой:
$("form").submit(function() {
$("input", "#urlhash").val(window.location.hash);
});
На странице загрузки:
var hashVal = $("input", "#urlhash").val();
if (IsHashValid(hashVal)) {
window.location.hash = hashVal;
}
IsHashValid()
можете проверить " undefined
" или другие вещи, которые вы не хотите обрабатывать.
Кроме того, убедитесь, что вы используете $(document).ready()
правильно, конечно.
RFC 2396 раздел 4.1:
Когда ссылка URI используется для выполнения действия поиска на идентифицированном ресурсе, необязательный идентификатор фрагмента, отделенный от URI символом штриховки ("#"), состоит из дополнительной справочной информации, которая должна интерпретироваться пользовательским агентом после поиска действие было успешно завершено . Как таковой, он не является частью URI, но часто используется вместе с URI.
(выделение добавлено)
Это потому, что браузер не передает эту часть на сервер, извините.
Вероятно, единственный выбор - это прочитать его на стороне клиента и передать вручную на сервер (GET / POST / AJAX). С уважением Артур
Вы также можете посмотреть, как играть с кнопкой «Назад» и историей браузера в Malcan.
Просто чтобы исключить возможность того, что вы на самом деле не пытаетесь увидеть фрагмент в GET / POST и действительно хотите знать, как получить доступ к той части объекта URI, которую вы имеете в своем коде на стороне сервера, он находится под Uri.Fragment. ( Документы MSDN ).
Возможное решение для запросов GET:
Новый формат ссылки: http://example.com/yourDirectory?hash=video01
Вызовите эту функцию к верхней части контроллера или 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");
}
}