在部分回发ASP.NET上维护面板滚动位置

时间:2011-03-13 10:06:23

标签: asp.net updatepanel postback scroll

我有一个在ASP.NET Panel中放置的gridview。 面板和Gridview都在UpdatePanel中。 gridview中有一列导致部分PostBacks。 我想在这些回发上保持Panel Scroll位置。 有什么办法吗? 问候。

3 个答案:

答案 0 :(得分:40)

在asp.net

中没有内置工具可以解决它

但是,这个问题有一个解决方法;你需要用javascript来处理它。

此处提到了解决方案:Maintain Scrollbar Position Inside UpdatePanel After Partial PostBack

编辑于2012年5月20日;看到评论后

<form id="form1" runat="server">
  <asp:ScriptManager ID="ScriptManager1" runat="server" ScriptMode="Release" />
   <script type="text/javascript">
      // It is important to place this JavaScript code after ScriptManager1
      var xPos, yPos;
      var prm = Sys.WebForms.PageRequestManager.getInstance();

      function BeginRequestHandler(sender, args) {
        if ($get('<%=Panel1.ClientID%>') != null) {
          // Get X and Y positions of scrollbar before the partial postback
          xPos = $get('<%=Panel1.ClientID%>').scrollLeft;
          yPos = $get('<%=Panel1.ClientID%>').scrollTop;
        }
     }

     function EndRequestHandler(sender, args) {
         if ($get('<%=Panel1.ClientID%>') != null) {
           // Set X and Y positions back to the scrollbar
           // after partial postback
           $get('<%=Panel1.ClientID%>').scrollLeft = xPos;
           $get('<%=Panel1.ClientID%>').scrollTop = yPos;
         }
     }

     prm.add_beginRequest(BeginRequestHandler);
     prm.add_endRequest(EndRequestHandler);
 </script>

 <asp:UpdatePanel ID="UpdatePanel1" runat="server">
   <ContentTemplate>
     <asp:Panel ID="Panel1" runat="server" Height="300">
        <%-- Some stuff which would cause a partial postback goes here --%>
     </asp:Panel>
   </ContentTemplate>
 </asp:UpdatePanel>

</form>

以下是代码快照: -

Maintain Scrollbar Position Inside UpdatePanel After Partial PostBack

答案 1 :(得分:5)

将MaintainScrollPositionOnPostback =“true”添加到您的页面指令。

答案 2 :(得分:0)

几天来,我一直在寻找解决此问题的方法,使用了典型的MaintenanceScrollPositionOnPostback替代方法以及使用BeginRequestHandler和EndRequestHandler的JavaScript解决方案,而我使用的是MasterPage。

什么都没用,但是我想出了一个相当简单的解决方案,使用jQuery和BeginRequestHandler和EndRequestHandler并使用相同的@ waqas-raja算法:

<script type="text/javascript">

    var scrollPosition = 0;

    $(document).ready(function () {

        $(window).scroll(function (event) {
            scrollPosition = $(window).scrollTop();
        });

    });

</script>

<script type="text/javascript">

    // It is important to place this JavaScript code after ScriptManager1
    var xPos, yPos;
    var prm = Sys.WebForms.PageRequestManager.getInstance();

    function BeginRequestHandler(sender, args) {
        console.log('BeginRequest');
    }

    function EndRequestHandler(sender, args) {
        $(window).scrollTop(scrollPosition);
    }

    prm.add_beginRequest(BeginRequestHandler);
    prm.add_endRequest(EndRequestHandler);

</script>

这个想法是,每当用户移动Scroll时,就将Scroll的位置捕获到全局变量中,这样就可以知道哪个是最后一个位置,并且在进行回发时,会输入EndRequestHandler事件并用它更新用户标记的最后位置

这在Firefox和Google Chrome中对我有用:)