当您使用 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 - 然后您可以检查此处的值,然后移动页面,或将其存储在变量中,并在最终请求中查询 - 请注意在原始更新完成之前用户单击另一个按钮的竞争条件等。
这应该会让你走运 - 在 Working with PageRequestManager Events 上有很多关于此的示例