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

时间:2011-07-05 13:34:51

标签: javascript .net asp.net ajax updatepanel

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

我通过互联网查看,无法找到解决问题的方法。当然设置MaintainScrollPositionOnPostback什么都不做。

有谁知道任何可以帮助我解决这个问题的事情?

干杯, PAKO

2 个答案:

答案 0 :(得分:1)

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

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

例如,您将使用ID“hfScrollPosition”创建HiddenField

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

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

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

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

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

答案 1 :(得分:0)

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

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