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