Подтвердить что ты не робот

Сохранение позиции прокрутки панели на частичной обратной передаче ASP.NET

У меня есть gridview, который помещается в панель ASP.NET. как панель, так и Gridview находятся в UpdatePanel. есть столбец в gridview, который вызывает частичные PostBacks. Я хочу сохранить позицию прокрутки панели для этих обратных передач. Там в любом случае? С уважением.

4b9b3361

Ответ 1

Нет встроенного средства для его решения в asp.net

Однако для этой проблемы существует обходной путь; Вам нужно обработать его с помощью javascript.

Решение упоминается здесь: Поддержание позиции прокрутки внутри UpdatePanel после частичного PostBack

Отредактировано 20 мая 2012 года; после просмотра комментариев

<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

Ответ 2

Добавить MaintainScrollPositionOnPostback = "true" в директиву вашей страницы.

Ответ 3

Я искал ответ на эту проблему в течение нескольких дней, используя типичную альтернативу MaintainScrollPositionOnPostback и решения JavaScript, использующие BeginRequestHandler и EndRequestHandler, где в моем случае я использую 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 :)