3

一些导航到我的页面的用户通过这样的 url 这样做:http://domain/ProductDetail.aspx?Productid=123#Pricing

在这个部分是一个 asp:button 来进行购买。此按钮会导致回发,并且当在浏览器中重新呈现页面时,FragmentIdentifier #Pricing 仍在地址窗口中。

这会导致问题,因为如果浏览器导航到#Pricing 部分,页面上呈现的新内容是不可见的。

如何防止回发时出现 FragmentIdentifier?

澄清:这个问题似乎发生在 Chrome 中,但在 IE8 或 FireFox 中没有发生。即使在 action 属性中没有引用它,Chrome 也会在回发后保留 #FragmentIdentifier。

4

4 回答 4

2

你不能,浏览器不发送它:

当使用 URI 引用对已识别的资源执行检索操作时,可选的片段标识符(由交叉线(“#”)字符与 URI 分隔)包含在检索后由用户代理解释的附加参考信息动作已成功完成。因此,它不是 URI 的一部分,但通常与 URI 结合使用。

如何从服务器端获取 Url Hash (#)

于 2012-07-16T18:45:37.187 回答
0

您可以通过重定向到同一页面来强制浏览器摆脱 # 标记。

于 2012-07-16T18:47:16.170 回答
0

浏览器不会在服务器端发送 URL 片段。您无法修改它们,您可以尝试的唯一选择是 URL 重写,如果有帮助的话。祝你好运...

于 2012-07-16T19:03:36.813 回答
0

ASP.NET 引擎将导致没有任何给定 URL 的简单提交,因此浏览器被迫采用当前页面的 URL。

您可以在回发后摆脱散列,方法是将自执行 javascript 挂接到 HTML 中,将散列替换为空字符串。

这是一个例子:

if(this.Page.IsPostback)
{
    this.Page.ClientScript.RegisterStartupScript(this.GetType(), "RemoveHash", "window.location.hash=''", true);
}
于 2016-06-13T11:36:53.937 回答