【问题标题】:How to Maintain Scroll position after asynchronous postback in asp.net with in the nested master?如何在嵌套母版中的 asp.net 中异步回发后保持滚动位置?
【发布时间】:2014-04-28 12:34:48
【问题描述】:

我有一个带有嵌套母版的子页面意味着 2 个母版页面从另一个继承,并且在该子页面中我只有所有用户控件。

所以在我的情况下,我必须在用户控件列表框的异步回发后保持子页面的滚动位置。

我试过了:

MaintainScrollPositionOnPostback="true" 

带有in page指令和js代码

<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("<%=Panel1.ClientID %>").scrollLeft;
           yPos = document.getElementById("<%=Panel1.ClientID %>").scrollTop;
       }
       function EndRequestHandler(sender, args) {
           document.getElementById("<%=Panel1.ClientID %>").scrollLeft = xPos;
           document.getElementById("<%=Panel1.ClientID %>").scrollTop = yPos;
       }
</script>

对于面板和 div 和更新面板..这些都完全失败了,为什么因为如果子页面被回发意味着相关的母版页也被回发..但我不知道如何保持滚动位置..

请尽快帮助我..

谢谢大家

【问题讨论】:

  • 尽快帮助我.. 不要点餐。你应该问请帮帮我

标签: javascript jquery asp.net master-pages browser-scrollbars


【解决方案1】:

假设我有一个

<asp:hiddenfield id="hid" runat="server"/>     
        var prm = Sys.WebForms.PageRequestManager.getInstance();
        prm.add_beginRequest(BeginRequestHandler);
        prm.add_endRequest(EndRequestHandler);
        function BeginRequestHandler(sender, args) {
        xPos = document.getElementById("<%=Panel1.ClientID %>").scrollLeft;
        yPos = document.getElementById("<%=Panel1.ClientID %>").scrollTop;
        var h = document.getElementById("<%=hid.ClientID %>");
        h.value = xPos.toString() + "_" + yPos.toString();  
        }
        function EndRequestHandler(sender, args) {
        var val = document.getElementById("<%=hid.ClientID %>").value.split('_');
        xPos = parseFloat(val[0]);
        yPos = parseFloat(val[1]);
        document.getElementById("<%=Panel1.ClientID %>").scrollLeft = xPos;
        document.getElementById("<%=Panel1.ClientID %>").scrollTop = yPos;
    }
</ asp:hiddenfield>

谢谢

【讨论】:

    【解决方案2】:

    如果你喜欢客户端代码和 jQuery:

    $(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;
            }
        }
    });
    

    如果你只喜欢客户端代码:

    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);
    

    【讨论】:

      猜你喜欢
      • 2010-10-11
      • 2011-04-26
      • 2011-09-28
      • 2019-08-03
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多