我知道可以在客户端(javascript)上使用windows.location.hash,但无论如何都无法从服务器端进行访问。
我知道可以在客户端(javascript)上使用windows.location.hash,但无论如何都无法从服务器端进行访问。
Answers:
在这种情况下,我们需要在ASP.Net回发中持久保存URL哈希。由于浏览器默认不会将哈希发送到服务器,因此唯一的方法是使用一些Javascript:
提交表单后,抓取哈希(window.location.hash
)并将其存储在服务器端隐藏的输入字段中,然后将其放入ID为“ urlhash
” 的DIV中,以便稍后使用。
在服务器上,如果需要使用此值,则可以使用该值。您甚至可以根据需要更改它。
在客户端加载页面时,请检查此隐藏字段的值。您将要通过包含在其中的DIV查找它,因为不会知道自动生成的ID。是的,您可以在此处使用.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()
当然,请确保使用正确。
RFC 2396第4.1节:
当使用URI引用对标识的资源执行检索操作时,可选的片段标识符(由分号(“#”)字符与URI隔开)由附加参考信息组成,这些参考信息将在检索后由用户代理解释动作已成功完成。因此,它不是URI的一部分,但通常与URI结合使用。
(添加了重点)
那是因为浏览器没有将该部分传输到服务器,对不起。
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");
}
}