解决页面刷新后滚动条回滚的问题。

本文介绍了一种在ASP.NET网页中保存和恢复滚动位置的方法。通过创建隐藏字段来记录div或Panel元素的水平和垂直滚动位置,并在页面加载时重新设置这些位置,从而实现了在页面回发后滚动位置的保持。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

1.在页面中新增一个方法
 private void KeepScrollPosition(Control p)
        {
            HiddenField oScrollPosX = new HiddenField();
            HiddenField oScrollPosY = new HiddenField();
            oScrollPosX.ID = p.ClientID + "X";
            oScrollPosY.ID = p.ClientID + "Y";
            this.Form.Controls.Add(oScrollPosX);
            this.Form.Controls.Add(oScrollPosY);


            string sScript = "window.document.getElementById('" + oScrollPosX.ClientID + "').value =" +
                 "window.document.getElementById('" + p.ClientID + "').scrollLeft;";
            sScript = sScript + "window.document.getElementById('" + oScrollPosY.ClientID + "').value = " +
                 "window.document.getElementById('" + p.ClientID + "').scrollTop;";
            this.ClientScript.RegisterOnSubmitStatement(this.GetType(), "", sScript);


            if (IsPostBack)
            {
                oScrollPosX.Value = this.Request.Form[oScrollPosX.ClientID];
                oScrollPosY.Value = this.Request.Form[oScrollPosY.ClientID];

                sScript = "window.document.getElementById('" + p.ClientID + "').scrollLeft = " + oScrollPosX.Value + ";" +
                          "window.document.getElementById('" + p.ClientID + "').scrollTop = " + oScrollPosY.Value + ";";

                this.ClientScript.RegisterStartupScript(this.GetType(), "", sScript, true);
            }
        }

 

2.在页面中设置需要设置滚动条的控件放在一个div或Panel中。
示例如下:
<div runat="server" id="sp" style="width: 100%; height: 450px; overflow:auto">
 //这里是DataGrid...
</div>

 

3.在页面中调用基类中的KeepScrollPosition方法
 protected override void Page_Load(object sender, EventArgs e)
{
            base.Page_Load(sender, e);
    //调用
            KeepScrollPosition(this.sp);
    //其他代码...

}

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值