Как сохранить позицию прокрутки на автоответчике? - PullRequest
20 голосов
/ 01 марта 2011

Как я могу вернуться на ту же позицию страницы на postback.Похоже, что он всегда достигает верхней части страницы.

Я пытался использовать maintainScrollPositionOnPostBack = "true"

Но это не работает.

Ответы [ 9 ]

36 голосов
/ 23 января 2014

Я недавно тоже это искал. Придумал загрузку Javascript для вставки, пока не обнаружил следующее:

Вверху вашего .aspx-кода вставьте следующее:

 MaintainScrollPositionOnPostback="true"

поэтому самое первое предложение в вашем .aspx начинается

<%@ Page Language="C#" MaintainScrollPositionOnPostback="true" AutoEventWireup="true" CodeBehind="Default.aspx.cs"

Это прекрасно работает для меня без необходимости добавлять какой-либо другой код для сохранения позиций полосы прокрутки с использованием панелей обновления

15 голосов
/ 01 марта 2011

Есть несколько способов, которыми я использовал для установки keepScrollPositionOnPostBack.Вы пробовали больше одного?Можете ли вы описать, что вызывает постбэк и какие браузеры вы тестировали?Вы используете главную страницу?

  1. Вы можете установить Page.MaintainScrollPositionOnPostBack = true; в коде при загрузке страницы.
  2. Вы можете добавить его в объявление страницы <%@ Page MaintainScrollPositionOnPostback="true" %>
  3. Вы можете добавить его в файл веб-конфигурации <pages maintainScrollPositionOnPostBack="true" />
6 голосов
/ 01 марта 2011

Вы можете установить .Focus () на определенный серверный элемент управления, когда ваша страница отправляет обратно.

3 голосов
/ 30 августа 2012

Вы используете Google Chrome для тестирования?У меня была та же проблема, но я начал тестировать в IE и Firefox, и она работала.Я не думаю, что Chrome поддерживает это свойство.Это также может быть проблемой .NET Framework 3.5.Вероятно, это исправлено в .NET 4.0

1 голос
/ 08 июля 2018
<script type="text/javascript">    
  var xPos, yPos;
  var prm = Sys.WebForms.PageRequestManager.getInstance();

  function BeginRequestHandler(sender, args) {
    if ($get('<%=Panel1.ClientID%>') != null) {         
      xPos = $get('<%=Panel1.ClientID%>').scrollLeft;
      yPos = $get('<%=Panel1.ClientID%>').scrollTop;
    }
 }

 function EndRequestHandler(sender, args) {
     if ($get('<%=Panel1.ClientID%>') != null) {       
       $get('<%=Panel1.ClientID%>').scrollLeft = xPos;
       $get('<%=Panel1.ClientID%>').scrollTop = yPos;
     }
 }
 prm.add_beginRequest(BeginRequestHandler);
 prm.add_endRequest(EndRequestHandler);

добавьте приведенный выше код в тег ScriptManager и добавьте MaintainScrollPositionOnPostback="true" в объявлении страницы

0 голосов
/ 14 мая 2019

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

Я искал ответ на эту проблему в течение нескольких дней, используя типичную альтернативу 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>

Идея состоит в том, чтобы фиксировать положение прокрутки в глобальной переменной каждый раз, когда пользователь перемещает прокрутку, таким образом, известно, какая позиция была последней, и при выполнении обратной передачи вводится событие EndRequestHandler иобновлено с последней позицией, которую пользователь пометил

Это сработало для меня в Firefox и Google Chrome:)

0 голосов
/ 12 апреля 2019

Примечание. Если задан элемент управления по умолчанию, он будет прокручиваться до этого элемента управления при обратной публикации, даже если Page MaintainScrollPositionOnPostback = "true"

0 голосов
/ 19 октября 2017

Хотя ответ bbbwex является правильным, мне потребовалось некоторое время, чтобы понять, что мне нужно поместить MaintainScrollPositionOnPostback = "true" в оба

  1. Верх страницы ASPX.

  2. В IsPostBack

Это работает после того, как я выполню оба условия.

0 голосов
/ 01 марта 2011

Если у вас есть определенный якорь, к которому вы хотите перейти, вы можете сделать что-то вроде описанного здесь . В противном случае вам придется использовать javascript и выяснить, насколько далеко вы находитесь от верхней части, сохранить его в скрытом поле или файле cookie и сбросить представление после загрузки страницы.

...