从更新面板异步回发后保持滚动位置

Maintain scroll position after async postback from update panel

本文关键字:滚动 位置 更新 异步      更新时间:2023-09-26

我在使用asp.net和更新面板时遇到了一些麻烦。问题是,每次从更新面板发生部分回发时,页面都会滚动回顶部。在我的大多数页面上,这不是一个大问题,但在某些页面上可能会变得相当长。然后,当用户位于页面底部时,我在其中显示了带有RadListView的jQuery弹出框,用户可以在此列表中选择元素。但是点击这个元素会导致部分回发,页面跳转到顶部。

我在网上找过了,找不到任何解决我问题的方法。当然设置MaintainScrollPositionOnPostback没有任何作用。

有谁知道什么可以帮助我处理这个问题吗?

欢呼,Pako

有一个解决这个问题的小方法,我很久以前在一个ERP中使用过。我不确定这是不是最好的解决方案,但它确实有效。

我不知道您是使用自定义Page类还是默认的System.Web.UI.Page类,但是,我会尝试向您解释如何做到这一点,然后您找到在您的环境中实现它的最佳方式,好吗?

您将创建一个HiddenField,例如,其ID为"hfScrollPosition"。

然后,您将创建一个javascript event: document.onscroll或类似的东西,并在事件中更新隐藏字段以获取当前滚动位置。例如:document.getElementById("hfScrollPosition").value = document.documentElement.scrollTop;

这样做,你将有一个ASP。. NET控件根据滚动体的位置动态地更新其值。因此,当页面中的某些控件进行回发时,可以在Page_Load事件中放入以下javascript代码:

document.documentElement.scrollTop = document.getElementById("hfScrollPosition").value;

所以,每次你的页面得到一个回发,正文滚动位置将被正确更新。


EDIT:我做了一个模拟:https://jsfiddle.net/j26fpgzo/

使用中继器中某个控件的ID,并在回发完成后使用JQuery滚动。

你可以得到一些控件的ID根据他们正在生成的格式