当您使用 UpdatePanels 时,您需要连接到 ASP.NET AJAX PageRequestManager
您需要向endRequest事件挂钩添加一个方法,这些挂钩是:
在异步回发完成并将控制权返回给浏览器后引发。
所以你会有类似的东西:
<script type="text/javascript">
Sys.WebForms.PageRequestManager.getInstance().add_endRequest(pageLoaded);
function pageLoaded(sender, args) {
window.scrollTo(0,0);
}
</script>
一旦更新请求完成,这将强制浏览器滚动回页面顶部。
当然,您还可以加入其他事件:
beginRequest // Raised before the request is sent
initializeRequest // Raised as the request is initialised (good for cancelling)
pageLoaded // Raised once the request has returned, and content is loaded
pageLoading // Raised once the request has returned, and before content is loaded
异步回发的美妙之处在于页面将保持滚动高度,而无需您设置 MaintainScrollPosition,因为没有“整页重新加载”发生,在这种情况下,您实际上希望发生这种效果,所以您需要手动创建它。
编辑以回应更新的问题
好的,所以如果您只需要在某些按钮按下时重置位置,您需要执行以下操作:
首先连接到 BeginRequest 代替/以及:
Sys.WebForms.PageRequestManager.getInstance().add_beginRequest(BeginRequestHandler);
这是因为在 args 参数中您可以访问:
args.get_postBackElement().id
它将告诉您启动整个事件的按钮的 id - 然后您可以检查此处的值,移动页面,或将其存储在变量中,并在最终请求中查询它 - 了解竞争条件,等用户在原始更新完成之前单击另一个按钮。
这应该会让你走运 - 在使用 PageRequestManager 事件上有很多例子