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

Как сохранить положение прокрутки в автоповторе?

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

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

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

4b9b3361

Ответ 1

Недавно я искал это. Нашел с загрузкой Javascript, который будет вставлен до тех пор, пока не найду следующее:

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

 MaintainScrollPositionOnPostback="true"

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

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

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

Ответ 2

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

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

Ответ 3

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

Ответ 4

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

Ответ 5

<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" в объявлении страницы.

Ответ 6

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

Ответ 7

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

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

  • В IsPostBack

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

Ответ 8

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

Ответ 9

Из этого вопроса: Сохранение позиции прокрутки панели при частичной обратной передаче 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>

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

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

Ответ 10

Убедитесь, что вы не устанавливаете кнопку по умолчанию в <form id="form1" runat="server" defaultbutton="YourDefaultButton">. Удалите defaultbutton="YourDefaultButton" и MaintainScrollPositionOnPostback="true" будет работать.