当页面加载是AJAX历史记录点的结果时,如何检测客户端?

时间:2010-05-25 07:51:55

标签: asp.net ajax asp.net-ajax browser-history

我正在尝试阻止在我的ASP.NET页面上发生的“闪烁”效果,这种效果是在用户导航离开后通过浏览器后退按钮导航到页面时发生的。闪烁的原因是我使用的是更新面板,在初始页面加载时会有一些内容。因此,当通过后退按钮加载页面时,初始内容在使用正确的历史记录感知数据更新之前会非常短暂地显示。

为了克服这个问题,我打算在初始页面加载时隐藏updatepanel(display:none),然后只要我们没有任何历史记录可以显示它。问题是我无法找出要检查的内容以确定是否有任何历史记录。我可以看到Sys.Application有一个_history成员但是当我在init页面上检查它时,每次都是null。

有谁知道我应该检查什么来确定是否有历史要处理页面加载客户端?在什么时候这样做?

3 个答案:

答案 0 :(得分:1)

浏览器的后退按钮及其提供的功能完全独立于您网页的内容。

您可以做的一件事是在进行AJAX更新时设置位置哈希值。加载页面时,您可能能够检测到这一点。我没试过。您应该能够解析服务器端URL的#部分,并查看您在AJAX历史记录中的位置。

location.hash = 'foo';

答案 1 :(得分:0)

感谢您的回复丹尼尔。我现在在我的更新面板周围有一个div,它的display属性设置为none。在Sys.Application的init事件中,我正在检查window.location.hash值,以确定页面加载是否是浏览器后退/前进按钮单击的结果。如果不是那么我将display属性设置为阻止,如果不是,我暂时将其保留为'display:none'。

在ScriptManager Navigate事件处理程序的服务器端,由于单击了后退按钮而调用,我正在注册一个客户端脚本块,它将display属性设置为阻塞。

我做了一些测试,似乎工作正常,我不再得到闪烁。我更愿意使用其中一个MS AJAX客户端对象来检查历史记录,但我们确实存在。

答案 2 :(得分:0)

在页面中放入一个空白值的隐藏输入,然后在页面加载时设置其值。你会发现当使用后退按钮时,页面加载脚本会发现仍然设置了值,你可以做出相应的响应。这利用了在页面加载之间保留表单内容的浏览器功能。