【问题标题】:How to keep whole page scroll position after asynchronous postback异步回发后如何保持整个页面滚动位置
【发布时间】:2011-04-26 07:02:15
【问题描述】:

我正在使用 asp.net 4.0 iis 7.5 microsoft visual studio 2010

我想要的是在异步回发发生时保持整个页面(浏览器)滚动位置(不是 div 或面板)(更新面板)

我该怎么做

其实我有一个功能可以像这样在回发后保持div滚动条的位置

       <script type="text/javascript">
        var xPos, yPos;
        var prm = Sys.WebForms.PageRequestManager.getInstance();
        prm.add_beginRequest(BeginRequestHandler);
        prm.add_endRequest(EndRequestHandler);
        function BeginRequestHandler(sender, args) {
            xPos = document.getElementById('Main').scrollLeft;
            yPos = document.getElementById('Main').scrollTop;
        }
        function EndRequestHandler(sender, args) {
            document.getElementById('Main').scrollLeft = xPos;
            document.getElementById('Main').scrollTop = yPos;
        }
    </script>

我找不到浏览器滚动条 id 来获取它的值来获取 document.getElementById

感谢回答

【问题讨论】:

    标签: javascript asp.net asynchronous asynchronous-postback


    【解决方案1】:

    asp.net 具有称为@987654321@ 的@page 指令属性

    希望这会有所帮助

    【讨论】:

    • MaintainScrollPostitionOnPostBack 在 FireFox 中运行良好。您在尝试与另一个组件(例如臭名昭​​著的 UpdatePanel)组合时遇到问题吗?
    • 当然我使用的是更新面板。我还能如何进行异步回发
    【解决方案2】:

    我在这里找到它:http://forums.asp.net/t/1300961.aspx

    只需在脚本管理器之后添加它。它适用于所有浏览器

    <script type="text/javascript">
        var prm = Sys.WebForms.PageRequestManager.getInstance();
        prm.add_beginRequest(beginRequest);
        function beginRequest()
        {
            prm._scrollPosition = null;
        }
    </script>
    

    【讨论】:

    • 唯一对我有用的解决方案谢谢
    【解决方案3】:

    你可以用客户端的方式来做:

    $(document).ready(function () {
        $(window).on('beforeunload', function () {
            document.cookie = "keepscroll=" + $(window).scrollTop();
        });
        var cs = document.cookie ? document.cookie.split(';') : [];
        var i = 0, cslen = cs.length;
        for (; i < cs.length; i++) {
            var c = cs[i].split('=');
            if (c[0].trim() == "keepscroll") {
                $(window).scrollTop(parseInt(c[1]));
                break;
            }
        }
    });
    

    如果你不是 jQuery 的朋友,那么你可以尝试类似的方法:

    window.onbeforeunload = function () {
        document.cookie = "keepscroll=" + document.body.scrollTop;
    };
    var keepscroll = window.setTimeout(function () {
        var cs = document.cookie ? document.cookie.split(';') : [];
        var i = 0, cslen = cs.length;
        for (; i < cs.length; i++) {
            var c = cs[i].split('=');
            if (c[0].trim() == "keepscroll") {
                window.scrollTo(0, parseInt(c[1]));
                break;
            }
        }
        window.clearTimeout(keepscroll);
        keepscroll = null;
    }, 100);
    

    【讨论】:

      猜你喜欢
      • 2011-09-28
      • 2012-04-25
      • 1970-01-01
      • 1970-01-01
      • 2014-07-13
      • 2012-03-27
      • 2019-08-03
      • 1970-01-01
      • 2010-10-11
      相关资源
      最近更新 更多