ASP.NET 的页面执行 PostBack 动作时,页面由伺服端重新传给客户端,而页面的垂直滚动条会跳回最上方,水平滚动条会跳回最左方。
为了解决此情形,只要将 Page 的MaintainScrollPositionOnPostBack 属性设为True 时,页面就会自动维护滚动条位置,它是如何实现这个动作的呢?

当把 Page.MaintainScrollPositionOnPostBack = "True" 时,检视 HTML 原始码,可以发现它多了"__SCROLLPOSITIONX" 及"__SCROLLPOSITIONY" 这二个 HiddenField,这二个 HiddenField 主要是要来记录页面滚动条的水平及垂直位置。

    <input type="hidden" name="__SCROLLPOSITIONX" id="__SCROLLPOSITIONX" value="0" />
    <input type="hidden" name="__SCROLLPOSITIONY" id="__SCROLLPOSITIONY" value="204" />

页面上也会多了以下这些JavaScript 程序代码,它主要是透过WebForm_SaveScrollPositionSubmit 及WebForm_RestoreScrollPosition 这二个函式来维护页面滚动条位置。

 1<script type="text/javascript">
 2<!--
 3theForm.oldSubmit = theForm.submit;
 4theForm.submit = WebForm_SaveScrollPositionSubmit;
 5
 6theForm.oldOnSubmit = theForm.onsubmit;
 7theForm.onsubmit = WebForm_SaveScrollPositionOnSubmit;
 8
 9theForm.oldOnLoad = window.onload;
10window.onload = WebForm_RestoreScrollPosition;
11// -->
12</script>

当页面Submit 时会利用WebForm_SaveScrollPositionSubmit 函式来记录页面目前的水平及垂直滚动条位置,将水平滚动条位置记录于"__SCROLLPOSITIONX" 这个 HiddenField,垂直滚动条位置记录于"__SCROLLPOSITIONY" 这个 HiddenField。

而 PostBack 后页面重新加载后,会利用WebForm_RestoreScrollPosition 函式来回复页面滚动条位置,也就是将记录在"__SCROLLPOSITIONX" 及"__SCROLLPOSITIONY" 这二个 HiddenField 的值,重新设定页面的水平及垂直滚动条位置,如此就达到维护页面滚动条位置的动作了

转载于:https://www.cnblogs.com/qiuweiguo/archive/2011/08/03/2125754.html

解析 Page.MaintainScrollPositionOnPostBack 属性相关推荐

  1. asp.net中MaintainScrollPositionOnPostback属性的使用

    可能我们会经常遇到这种情况,当页面内容比较多的时候,当用户执行操作执行一次页面回送后,页面又重新从顶端开始显示,用户不得不重新拖动滚动条回到先前的位置,这会给用户带来很不友好的体验.即时使用updat ...

  2. ASP.NET @Page指令属性

    ASP.NET @Page指令属性 @Page指令位于每个ASP.NET页面的顶部,告诉ASP.NET这个具体页面使用什么属性,以及该页面继承的用户控件.ASP.NET页面@Page指令属性有:Asp ...

  3. %@ Page% page指令属性

    以前只知道会用就行,今天boss让我去理解一下<%@ Page%>里面的各个属性的用法,于是就有了这篇东凑西凑的文章! <%@ Page%>是页面指令,作用于当前页面,指定使用 ...

  4. ASP.NET的Page.IsPostBack 属性详细说明(转)

    转自:http://www.donews.net/shanyou/archive/2004/04.aspx 现在从对ASP.NET页面的执行顺序开始,体会一下B/S结构的程序的特点,下图是ASP.NE ...

  5. 浅析ASP.NET的Page.IsPostBack 属性

    浅析ASP.NET的Page.IsPostBack 属性 http://www.sina.com.cn 2008年05月06日 11:33  IT168.com [IT168技术文档] 现在从对ASP ...

  6. 浅析ASP.NET的Page.IsPostBack 属性http://www.sina.com.cn 2008年05月06日 11:33 IT168.com

    浅析ASP.NET的Page.IsPostBack 属性 http://www.sina.com.cn 2008年05月06日 11:33  IT168.com [IT168技术文档] 现在从对ASP ...

  7. Page.IsValid 属性

    Page.IsValid 是在 Page_Load 发生之后才会处理 所以在 Page_Load 中调用它是无用的 应该在 OnClick , OnSelectedIndexChanged 这类的服务 ...

  8. Android Animation学习(四) ApiDemos解析:多属性动画

    Android Animation学习(四) ApiDemos解析:多属性动画 如果想同时改变多个属性,根据前面所学的,比较显而易见的一种思路是构造多个对象Animator , ( Animator可 ...

  9. 关于@Page的属性

    关于@Page的属性 属性 AspCompat 当设为 true 时,允许在单线程单元 (STA) 线程上执行页.这允许页调用 STA 组件,例如用 Microsoft Visual Basic 6. ...

最新文章

  1. 状态保持中的cookie
  2. Jquery的html方法里包含特殊字符的处理,类似双引号之类的
  3. VC导入导出二维数组到 .txt
  4. 【Linux】gcc和g++的区别
  5. 一个领导力培训的游戏练习
  6. Python中的operator.itemgetter函数
  7. linux下安装mysql5.7方法与常见问题
  8. latex 生成中文目录乱码问题解决
  9. mysql 在查询语句返回的列中包含一列表示该条记录在整个结果集中的行号
  10. 查询数据库最大id加1
  11. np.dot和np.matmul的区别与联系
  12. 无法获得锁 /var/lib/dpkg/lock - open (11: 资源暂时不可用) ...ubuntu 18.04 安装vim遇到的错误...
  13. Spark REST服务api官网地址
  14. Ubuntu16.04 + 微软kinect 2 实现rgbdslam V2
  15. eclipse简单的中英文切换,觉大多数的版本都可以
  16. 为什么要用 Tair 来服务低延时场景 - 从购物车升级说起
  17. MP中的条件更新操作
  18. c语言个人所得税的打印思路,C语言编写一个计算个人所得税的程序,要求输入收入金额,能够输...
  19. docker之卷10
  20. cf1326 E. Bombs

热门文章

  1. 意大利终于付出了代价
  2. 线性序列机与串口接口DAC驱动设计与验证
  3. centos php 开启libgdgd_CentOS6.6下yum安装PHP的gd库失败?-问答-阿里云开发者社区-阿里云...
  4. python读取html_从零开始的Python爬虫教程(一):获取HTML文档
  5. Photoshop 手动画金标准流程
  6. RestFramework之认证组件
  7. [luoguP2331] [SCOI2005]最大子矩阵(DP)
  8. React学习小结(二)
  9. [转]Unity-移动设备可用的压缩解压缩源码
  10. Spark RDD/Core 编程 API入门系列 之rdd实战(rdd基本操作实战及transformation和action流程图)(源码)(三)...