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

Posted

技术标签:

【中文标题】从更新面板异步回发后保持滚动位置【英文标题】:Maintain scroll position after async postback from update panel 【发布时间】:2011-09-28 20:04:23 【问题描述】:

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

我浏览了互联网,但找不到任何解决问题的方法。当然设置MaintainScrollPositionOnPostback 什么都不做。

有没有人知道任何可以帮助我解决这个问题的方法?

干杯, 帕科

【问题讨论】:

复制:***.com/questions/5288682/… …或Reset scroll position after Async postback - ASP.NET 【参考方案1】:

在repeater中使用一些控件的ID,回发完成后使用JQuery滚动。

您可以根据它们生成的格式获取某些控件的 ID。

【讨论】:

【参考方案2】:

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

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

您将创建一个HiddenField,例如,ID 为“hfScrollPosition”。

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

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

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

因此,每次您的页面获得回发时,正文滚动位置都会正确更新。


编辑:我做了一个小提琴来模拟它: https://jsfiddle.net/j26fpgzo/

【讨论】:

以上是关于从更新面板异步回发后保持滚动位置的主要内容,如果未能解决你的问题,请参考以下文章

在更新面板中部分回发后样式中断。我怎样才能解决这个问题?

更新面板内的jquery datepicker在回发后消失

回发后更新面板中的jquery事件处理程序不起作用[重复]

回发后asp.net jquery脚本未运行

在异步回发的更新面板中禁用按钮

回发后jquery datepicker不起作用