如何在异步回发后保持整页滚动位置

时间:2010-10-16 09:59:31

标签: javascript asp.net asynchronous asynchronous-postback

我正在使用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

感谢答案

3 个答案:

答案 0 :(得分:1)

asp.net具有名为MaintainScrollPositionOnPostBack

的@page指令属性

希望这会有所帮助

答案 1 :(得分:1)

我在这里找到了它: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>

答案 2 :(得分:0)

您可以通过客户端方式执行此操作:

$(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);
相关问题