Как я могу предотвратить переход страницы на верхнюю позицию после неудачной проверки?
42938 просмотра
7 ответа
У меня есть простая страница aspx с несколькими текстовыми полями и кнопкой отправки. Некоторые поля являются обязательными, и под кнопкой находится ValidationSummary. Полная форма больше высоты экрана, поэтому нужно прокрутить вниз, чтобы добраться до кнопки отправки. Если я не заполняю все обязательные поля и нажимаю «Отправить», проверка завершается неудачно, как ожидалось, и в сводке проверки отображаются некоторые информационные сообщения под кнопкой. Проверка происходит на клиенте и обратной передачи не происходит.
Так что все это работает, как хотелось бы. Но беспокоит то, что страница перемещается («прыгает») в верхнюю позицию, когда я нажимаю на кнопку «Отправить». Чтобы увидеть сводку проверки, нужно снова переместиться вниз по странице.
Я попытался установить для ShowSummary
свойства значение false
(которое не имеет особого смысла): проверка все еще работает (без обратной передачи), но в этом случае страница не перемещается в верхнюю позицию. Таким образом, проблема, кажется, зависит от визуализации проверочных текстов.
Есть ли способ предотвратить переход этой страницы?
Заранее спасибо!
Обновить:
Поведение, описанное выше, не зависит от браузера. Я тестировал в пяти разных браузерах, и везде одинаково.
Автор: Slauma Источник Размещён: 12.11.2019 09:45Ответы (7)
32 плюса
Я задал вопрос на asp.net ( http://forums.asp.net/p/1545969/3779312.aspx ) и получил ответы с двумя решениями. Лучше всего этот фрагмент Javascript, который поддерживает положение прокрутки:
<script type="text/javascript">
window.scrollTo = function( x,y )
{
return true;
}
</script>
Это только для размещения на странице и некуда звонить.
Другое решение аналогично предложению RioTera здесь (с использованием MaintainScrollPositionOnPostBack
), но добавляет EnableClientScript="false"
к Валидаторам принудительную обратную передачу. Это тоже работает, но цена - это искусственный ответный удар.
23 плюса
Вы можете использовать свойство Page MaintainScrollPositionOnPostBack:
В коде позади:
Page.MaintainScrollPositionOnPostBack = true;
или в вашей веб-форме:
<%@ Page Language="C#" AutoEventWireup="true" CodeFile="Default.aspx.cs" Inherits="_Default" MaintainScrollPositionOnPostback="true" %>
Автор: riotera
Размещён: 10.04.2010 01:11
6 плюса
Попробуйте установить фокус страницы. Page.SetFocus(control);
У меня есть кнопка вставки, которая добавляет дополнительную строку в мое представление сетки, которое является одним из многих элементов на странице, поэтому я могу добавить его Page.SetFocus(control)
в качестве последнего метода в моем событии btnInsert_Click.
4 плюса
Я обнаружил, что установка свойства:
maintainScrollPositionOnPostBack="true"
в вашем Web.config <pages>
разделе работает хорошо.
1 плюс
Страница мерцает, потому что вся страница отправляется обратно на сервер, а содержимое снова отправляется с сервера. Вы должны использовать тег UpdatePanel, чтобы окружить место, которое вы хотите обновить. Это только отправит обратно информацию, которая находится внутри тега
<asp:ScriptManager ID="ScriptManager1" runat="server" />
<asp:UpdatePanel ID="UpdatePanel1" runat="server">
<ContentTemplate>
<!-- Place updatable markup and controls here. -->
</ContentTemplate>
</asp:UpdatePanel>
Прочитайте http://msdn.microsoft.com/en-us/library/bb386573(v=vs.100).aspx#CodeExamples
Автор: Hoy Cheung Размещён: 14.01.2013 11:050 плюса
К сожалению, MantainScrollPositionOnPostback больше не работает в современных браузерах. Для кросс-браузер-совместимого решения вы можете использовать этот фрагмент (требуется jQuery):
<asp:HiddenField runat="server" ID="hfPosition" Value="" />
<script type="text/javascript">
$(function () {
var f = $("#<%=hfPosition.ClientID%>");
window.onload = function () {
var position = parseInt(f.val());
if (!isNaN(position)) {
$(window).scrollTop(position);
}
};
window.onscroll = function () {
var position = $(window).scrollTop();
f.val(position);
};
});
</script>
Смотрите также мой ответ здесь .
Автор: Darkseal Размещён: 16.12.2014 01:470 плюса
Я использую MVC5, и единственный способ остановить прыжок был с кодом JQuery ниже.
Я протестировал решение для Safari, Chrome, Mozilla, Internet Explorer и Opera.
$(document).scrollTop($('form#formCheckout').offset().top);
event.stopPropagation();
event.preventDefault();
Автор: Oscar Fuquen
Размещён: 17.07.2015 03:16
Вопросы из категории :
- asp.net Контрольный список для проверки подлинности Windows IIS 6 / ASP.NET?
- asp.net Валидация клиентской стороны ASP.Net
- asp.net .NET - получить протокол, хост и порт
- asp.net Как получить полный URL страницы, на которой я нахожусь в C #
- asp.net Как заставить Visual Studio заново создать файлы .designer для файлов aspx / ascx?
- asp.net Response.Redirect с POST вместо Get?
- validation Проверить перечисление значений
- validation Каков наилучший способ проверки XML-файла по сравнению с XSD-файлом?
- validation Каков наилучший способ проверки полей с использованием ASP.NET MVC?
- validation Проверка десятичных чисел в JavaScript - IsNumeric ()
- validation Как проверить адрес электронной почты в JavaScript
- validationsummary Как я могу предотвратить переход страницы на верхнюю позицию после неудачной проверки?
- validationsummary Пользовательский Validator запускается, но он не обновляет ValidationSummary
- validationsummary Показать ValidationSummary MVC3 в качестве начальной загрузки "alert-error"
- validationsummary Сводка валидации без данных
- validationsummary ASP.NET Webforms - ValidationSummary показывает различные ошибки
- validationsummary Проверка углового управления JS и ASP на стороне сервера