Запретить прокрутку страницы после обратной передачи

Я работаю над суммированием оценок пользователей на основе их проверок в CheckBoxList. Каждый раз, когда пользователь проверяет поле, в общий балл добавляется значение X. Когда пользователь снимает флажок, значение, X, вычитается из общей оценки. Здесь нет проблем.

Проблема, с которой я сталкиваюсь, заключается в том, что использование опции AutoPostback в свойствах CheckBoxList заставляет страницу загружаться обратно в верхнюю часть, а не оставаться там, где находился пользователь, а это означает, что они должны продолжать прокручивать после каждой проверки/снимите флажок. Есть ли способ предотвратить это?

Ответ 1

Ajax решение

Конечно, лучший способ - использовать Ajax-вызов для этого. Страница вообще не перемещается, а данные просто обновляются. Панель обновления - это быстрое и простое решение для запуска - не оптимальное решение, но если у вас есть простая страница, она очень хорошая.

Второе решение

Второе решение заключается в использовании якоря #. Вы устанавливаете точку, в которой вам нравится показываться:

<a name="PointA"></a>

И вы вызываете страницу с помощью этого якоря как page.aspx#PointA.

Третье решение

Третье решение - использовать внутренний код JavaScript ASP.NET. На объявлении страницы (верхняя первая строка) <%@Page MaintainScrollPositionOnPostback="true" %>.

Или в файле web.config, чтобы повлиять на все страницы, <pages maintainScrollPositionOnPostBack="true"/>.

Или программно System.Web.UI.Page.MaintainScrollPositionOnPostBack = true; открыть и закрыть по требованию.

Использование jQuery

С помощью только двух строк кода JQuery вы можете сделать хорошую анимацию в точке, которую вы хотите переместить после поста назад:

var WhereToMove = jQuery("#PointA").position().top;
jQuery("html,body").animate({scrollTop: WhereToMove }, 1000);

И вы перемещаете страницу к этому элементу:

<a id="PointA" name="PointA"></a>

поиск Гугл

И, наконец, вы можете использовать собственный код JavaScript, чтобы сделать то же самое. В Интернете есть много примеров для этого: https://www.google.com/?q=asp.net+remain+position

Ответ 2

Два лучших способа предотвращения прокрутки страницы после обратной передачи: Поместите это в web.config.
1) страницы поддерживаютScrollPositionOnPostBack = "true"

Многие люди сомневаются, что где именно место поставить эту строку. Таким образом, точное местоположение для этой строки

<system.web>
<pages maintainScrollPositionOnPostBack="true">
</system.web>

Примечание. Это применимо ко всему решению, которое предотвращает каждую форму прокрутки

2) Второй способ добиться этого - поместить эту строку вверху файла aspx

MaintainScrollPositionOnPostback = истина

Подобно этому

<%@ Page MaintainScrollPositionOnPostback=true Language="C#" AutoEventWireup="true" CodeBehind="xx.aspx.cs" Inherits="xx.Global" %>

Примечание. Это применимо к конкретной форме, которую вы хотите предотвратить.

Ответ 3

Есть три возможных способа, о которых я могу думать:

  • На странице, в которой прокрутка должна быть отключена, установите атрибут MaintainScrollPositionOnPostback в директиве "Страница" ( "<% @Page.... > " ) на true, т.е. <%@ Page MaintainScrollPositionOnPostback=true ...other settings... > должен появиться на наверх страницы aspx

  • Для всех страниц веб-сайта добавьте следующую строку в web.config: <pages MaintainScrollPositionOnPostback=true>

  • Включение запросов AJAX

Ответ 4

Когда вы хотите прекратить прокрутку и обновление страницы, тег MaintainScrollPositionOnPostback = "true" - это самая важная вещь.

Ответ 5

HTML-теги можно ссылаться программно в .NET благодаря тегу runat.

Просто дайте телу тега runat = "server" в HTML и id = "body" или что бы вы ни ссылались на него, как в коде (я буду использовать body для примера).

Затем вы можете добавлять/изменять атрибуты тега в коде следующим образом:

Body.Attributes.Add("scroll", "no")

Поместите код на загрузку страницы.

Ответ 6

Поместите эту строку в файл webconfig:

<pages maintainScrollPositionOnPostBack="true">