ASP.NET中CheckboxList启用AutoPostBack后避免滚动至顶部的问题
解决ASP.NET CheckBoxList AutoPostBack后页面滚动回顶部的问题
方法1:利用UpdatePanel内置属性维护滚动位置
直接给UpdatePanel添加ScrollPosition="Maintain"属性,这是ASP.NET为局部回发提供的原生解决方案,无需额外脚本:
<asp:UpdatePanel ID="upd" runat="server" ScrollPosition="Maintain"> <ContentTemplate> <!-- 原页面内容保持不变 --> </ContentTemplate> </asp:UpdatePanel>
方法2:用JavaScript记录并恢复滚动位置
如果内置属性不生效,可通过jQuery在局部回发前后记录、恢复滚动位置:
- 确保页面已引入jQuery(若未引入):
<script src="https://code.jquery.com/jquery-3.7.1.min.js"></script>
- 添加以下脚本:
var savedScrollTop = 0; // 点击CheckboxList选项前记录当前滚动位置 $(document).on('click', '#<%= ddlClubs.ClientID %> input[type="checkbox"]', function() { savedScrollTop = $(window).scrollTop(); }); // 局部回发完成后恢复滚动位置 Sys.WebForms.PageRequestManager.getInstance().add_endRequest(function() { $(window).scrollTop(savedScrollTop); });
方法3:全局设置页面滚动位置维护
在页面的Page指令中添加MaintainScrollPositionOnPostBack="true",该设置会对所有回发控件生效:
<%@ Page Language="C#" AutoEventWireup="true" CodeBehind="YourPage.aspx.cs" Inherits="YourNamespace.YourPage" MaintainScrollPositionOnPostBack="true" %>
注意事项
- 优先尝试方法1,这是针对UpdatePanel局部回发的最优解;
- 方法3为全局配置,会影响页面上所有触发回发的控件;
- 确保UpdatePanel内的控件都能触发局部回发(你的代码中控件均在ContentTemplate内,默认支持自动触发)。
内容的提问来源于stack exchange,提问作者Sumit Gore
相关产品推荐
相关产品推荐

