У нас была ситуация, когда нам нужно было сохранить хэш URL-адреса в ответах постов ASP.Net. Поскольку браузер по умолчанию не отправляет хэш на сервер, единственный способ сделать это - использовать Javascript:
Когда форма отправляется, захватите хеш (window.location.hash
) и сохраните его в скрытом поле ввода на стороне сервера. Поместите его в DIV с идентификатором "urlhash
", чтобы мы могли легко найти позже.
На сервере вы можете использовать это значение, если вам нужно что-то с ним сделать. Вы даже можете изменить его, если вам нужно.
На странице загрузки на клиенте , проверьте значение этого скрытого поля. Вы захотите найти его по DIV, в котором он содержится, поскольку автоматически сгенерированный идентификатор не будет известен. Да, вы могли бы сделать здесь некоторые хитрости с .ClientID, но мы обнаружили, что проще просто использовать оболочку DIV, поскольку она позволяет всему этому Javascript жить во внешнем файле и использоваться в общем виде. *
Если скрытое поле ввода имеет допустимое значение, установите его в качестве хэша URL (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()
надлежащим образом, конечно.