2015-02-18 2 views
3

У меня есть GridView, отображаемый в div, который содержится в элементе управления UpdatePanel на странице asp.net. Div настроен так, чтобы сделать GridView прокручиваемым, когда он отображает много информации, одновременно делая другую информацию в панели обновлений стабильной.Сохранять положение прокрутки DIV в UpdatePanel через Postback

В любом случае элементы в GridView можно кликать, но позиция прокрутки содержащего div не сохраняется через обратную передачу, независимо от того, что я пытаюсь сделать. В настоящее время я пытаюсь решить проблему с помощью jQuery, поскольку это кажется самым простым способом. Мой код следующим образом:

<head id="Head1" runat="server"> 
     <script src="https://ajax.googleapis.com/ajax/libs/jquery/1.11.2/jquery.min.js"></script> 

    <script type="text/javascript"> 
      var scroll = function() { 
       Y: '#<%= scrollPos.ClientID %>' 
      }; 

      $(document).ready(function() { 
       $("#subResults").scrollTop($(scroll.Y).val()); 

       $('#subResults').scroll(function() { 
        $(scroll.Y).val(this.scrollTop); 
       }); 
      }); 
     </script> 
    </head> 

    <body> 
    <asp:ScriptManager ID="ScriptManager1" runat="server"></asp:ScriptManager> 
     <asp:UpdatePanel ID="resultPanel" runat="server" ChildrenAsTriggers="True" UpdateMode="Conditional"> 
      <ContentTemplate> 
       <div id="subResults"> 
        <asp:GridView ID="resultGrid" runat="server" 
            AutoGenerateColumns="false" Visible="True" 
            AutoGenerateSelectButton="True" 
            OnRowDataBound="resultGrid_RowDataBound" 
OnSelectedIndexChanged="resultGrid_SelectedIndexChanged"> 
         <Columns> 
          // columns columns columns... 
         </Columns> 
        </asp:GridView> 
        <asp:HiddenField ID="scrollPos" runat="server" Value="0" /> 
       </div> 
    </body> 

Я использую пример, приведенный here. Я пытаюсь сделать это точно так, как указано, или нет, это не сработает: мой элемент GridView берет клик, делает то, что он должен делать, а затем GridView снова прокручивается назад в начало после завершения обратной передачи. Как я могу заставить div «subResults» удерживать свою позицию прокрутки через Postback?

ответ

6

Решено. Блок кода ниже, наклеенные чуть ниже моего объекта Script менеджер, получил прокруткой 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 = $get('scrollDiv').scrollLeft; 
     yPos = $get('scrollDiv').scrollTop; 
    } 
    function EndRequestHandler(sender, args) { 
     $get('scrollDiv').scrollLeft = xPos; 
     $get('scrollDiv').scrollTop = yPos; 
    } 
</script> 

Кредит Andrew Frederick

Смежные вопросы