如何从服务器端获取URL哈希(#)

内容来源于 Stack Overflow,并遵循CC BY-SA 3.0许可协议进行翻译与使用

  • 回答 (2)
  • 关注 (0)
  • 查看 (31)

我知道在客户端(Javascript),您可以使用windows.location.hash,但是无论如何都找不到从服务器端访问的。

提问于
用户回答回答于

在这种情况下,我们需要在ASP.NET回发中持久化URL散列。由于浏览器默认不会将散列发送到服务器,因此唯一的方法是使用一些Javascript:

  1. 当表单提交时,获取散列(window.location.hash)并将其存储在服务器端隐藏的输入字段中,将其放入一个id为“”的dIV中。urlhash“这样我们以后就能很容易地找到它了。
  2. 在服务器上如果需要使用此值,可以使用它。如果你需要的话,你甚至可以改变它。
  3. 页面加载在客户端,检查这个隐藏字段的值。将希望通过包含在其中的DIV找到它,因为自动生成的ID不会被知道。是的,可以在这里使用.ClientID进行一些技巧,但是我们发现只使用包装器DIV就更简单了,因为它允许所有这些Javascript驻留在外部文件中,并以通用的方式使用。
  4. 如果隐藏输入字段有一个有效值,将其设置为URL散列(window.location.hash again)和/或执行其他操作。

它最终是一些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()当然,很合适。

用户回答回答于

当URI引用用于对已标识的资源执行检索操作时,可选的片段标识符(由交叉(“#”)字符与URI分隔)由其他引用信息组成。在检索操作成功完成后,用户代理将对其进行解释。因此,它不是URI的一部分,而是经常与URI一起使用。

扫码关注云+社区