在回发时从URL中删除#FragmentIdentifier

时间:2012-07-16 18:38:17

标签: asp.net html

导航到我的网页的一些用户通过以下网址进行操作:http://domain/ProductDetail.aspx?Productid=123#Pricing

在本节中是一个asp:按钮进行购买。此按钮会导致回发,当页面在broswer中重新呈现时,FragmentIdentifier #Pricing仍在地址窗口中。

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

如何在回发时阻止FragmentIdentifier?

澄清: 看来这个问题发生在Chrome中,但在IE8或FireFox中不会发生。在回发后,Chrome会保留#FragmentIdentifier,即使在action属性中没有对它进行引用也是如此。

4 个答案:

答案 0 :(得分:2)

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

  

使用URI引用对其执行检索操作时   标识资源,可选的片段标识符,分隔   由交叉阴影线(“#”)字符组成的URI由附加组成   用户代理在之后解释的参考信息   检索行动已成功完成。因此,事实并非如此   URI的一部分,但通常与URI结合使用。

How to get Url Hash (#) from server side

答案 1 :(得分:0)

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

答案 2 :(得分:0)

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

答案 3 :(得分:0)

ASP.NET引擎将导致一个没有任何给定URL的简单提交,因此浏览器将被强制获取当前页面的URL。

你可以通过将自动执行的javascript挂钩到HTML中来消除散列后的哈希值,这会将哈希值替换为空字符串。

以下是一个例子:

if(this.Page.IsPostback)
{
    this.Page.ClientScript.RegisterStartupScript(this.GetType(), "RemoveHash", "window.location.hash=''", true);
}