Элементы управления проверкой ASP.NET и поля подтверждения Javascript

У меня есть страница, на которой используются элементы управления проверкой ввода на стороне сервера .NET. На этой странице также есть окно подтверждения javascript, которое срабатывает при отправке формы. В настоящее время, когда выбрана кнопка «Отправить», появляется окно подтверждения javascript, и после подтверждения запускаются элементы управления проверкой на стороне сервера ASP.NET. Я хотел бы активировать элементы управления проверкой на стороне сервера ДО того, как отобразится окно подтверждения javascript.

Как этого добиться? Я включил образец моего текущего кода ниже.

sample.aspx

<asp:textbox id=foo runat=server />
<asp:requiredfieldvalidator id=val runat=server controltovalidate=foo />
<asp:button id=submit runat=server onClientClick=return confirm('Confirm this submission?') />

sample.aspx.vb

Sub Page_Load()
    If Page.IsPostback() Then
        Page.Validate()

        If Page.IsValid Then
            'process page here'
        End If
    End If
End Sub

Спасибо за любую помощь.

Стоит ли изучать PHP в 2026-2027 годах?
Стоит ли изучать PHP в 2026-2027 годах?
Привет всем, сегодня я хочу высказать свои соображения по поводу вопроса, который я уже много раз получал в своем сообществе: "Стоит ли изучать PHP в...
Поведение ключевого слова "this" в стрелочной функции в сравнении с нормальной функцией
Поведение ключевого слова "this" в стрелочной функции в сравнении с нормальной функцией
В JavaScript одним из самых запутанных понятий является поведение ключевого слова "this" в стрелочной и обычной функциях.
Приемы CSS-макетирования - floats и Flexbox
Приемы CSS-макетирования - floats и Flexbox
Здравствуйте, друзья-студенты! Готовы совершенствовать свои навыки веб-дизайна? Сегодня в нашем путешествии мы рассмотрим приемы CSS-верстки - в...
Тестирование функциональных ngrx-эффектов в Angular 16 с помощью Jest
В системе управления состояниями ngrx, совместимой с Angular 16, появились функциональные эффекты. Это здорово и делает код определенно легче для...
Концепция локализации и ее применение в приложениях React ⚡️
Концепция локализации и ее применение в приложениях React ⚡️
Локализация - это процесс адаптации приложения к различным языкам и культурным требованиям. Это позволяет пользователям получить опыт, соответствующий...
Пользовательский скаляр GraphQL
Пользовательский скаляр GraphQL
Листовые узлы системы типов GraphQL называются скалярами. Достигнув скалярного типа, невозможно спуститься дальше по иерархии типов. Скалярный тип...
3
0
15 610
8

Ответы 8

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

Дело в том, что Return Confirm срабатывает до JavaScript валидатора. все это связано с жизненными циклами и прочим.

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

если МАЙ изменит последовательность запуска, если вы добавите JS для кодирования подтверждения возврата к кнопке в методе HIJAX, где он назначен событию onClick после того, как страница была полностью загружена в браузер, но я никогда не использовал эта методология для этой возможности, так что не цитируйте меня там.

Валидаторы запускаются обработчиком onsubmit в форме.

если вы переопределите form.onsubmit, вы потеряете активацию валидатора, хотя вы можете вручную предоставить необходимый JS.

Как насчет использования элемента управления ValidatorCallout в ASP.NET Control Toolkit? От: http://www.asp.net/AJAX/AjaxControlToolkit/Samples/ValidatorCallout/ValidatorCallout.aspx

ValidatorCallout - это расширитель ASP.NET AJAX, который расширяет функциональность существующих валидаторов ASP.NET. Чтобы использовать этот элемент управления, добавьте поле ввода и элемент-валидатор, как обычно. Затем добавьте ValidatorCallout и задайте для его свойства TargetControlID ссылку на элемент управления валидатором.

Я не использовал его, но мне кажется, что он даст вам желаемую валидацию на стороне клиента.

Кажется, это очень распространенная проблема.

Обходной путь:

Сначала проверьте страницу, затем вызовите confirm, как показано здесь и здесь. У этого есть недостаток, заключающийся в том, что проверка выполняется дважды - один раз в вашем коде и один раз в сгенерированном коде в отправке onclick.

Как заставить это работать правильно, т.е. сначала проверить страницу (и только один раз), а затем показать поле confirm, я пока не знаю.

Обновлено: полезное предложение Здесь:

What ASP.NET does behind the scenes when validation controls exist, is add an autogenerated onClick event for each button. This OnClick event would supercede the custom OnClick event. So to overcome this I did the following:

  1. add CausesValidation = False
  2. added Validate() and IsValid code to the onClick event behind the page to simulate the now missing autogenerated validation code behind the button.

Изменить 2: полный пример

<asp:Button ID = "btnSubmit" runat = "server" Text = "Submit" OnClientClick = "if (Page_ClientValidate()){ return confirm('Do you want to submit this page?')}" CausesValidation = "false" />

Вы должны проверить страницу на самом клиенте.

function validate()
{
    Page_ClientValidate();
    if (Page_IsValid)
        // do your processing here

    return Page_IsValid;
}

Этот метод можно вызвать в событии «onClientClick» кнопки и в коде программной части, если страница действительна, и выполнить обработку, если проверка на стороне клиента прошла успешно.

Итак, при нажатии кнопки вы можете сделать -

protected void SubmitButton_Click(object sender, EventArgs e)    
{    
    if (!this.isValid)
        return;

    // do the processing here
}

Поле подтверждения в коде позади после проверки

     <asp:Button ID = "btnSave" runat = "server" OnClientClick = "javascript:return ConfirmSubmit()" OnClick = "btnSave_Click" Text = "Save" /> 


//---javascript -----
function ConfirmSubmit()
{
   Page_ClientValidate();
   if (Page_IsValid) {
       return confirm('Are you sure?');
    }
 return Page_IsValid;
}

+1 но ваш заголовок сбивает с толку. Окно подтверждения отсутствует в коде.

taylor michels 04.09.2014 17:26

Другие вопросы по теме