ASP.NET Validation Controls и Javascript Подтвердить поля - PullRequest
3 голосов
/ 26 сентября 2008

У меня есть страница, использующая элементы управления проверкой ввода на стороне сервера .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

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

Ответы [ 8 ]

8 голосов
/ 29 января 2009

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

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

Сначала проверьте страницу, затем наберите confirm, как показано здесь и здесь . Это имеет недостаток: дважды вызывать проверку - один раз в вашем коде и один раз в сгенерированном коде при отправке onclick.

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

Редактировать: Вот полезное предложение:

Что ASP.NET делает за кулисами когда существуют средства проверки правильности, это добавить автоматически сгенерированное событие onClick для каждая кнопка. Это событие OnClick будет заменить пользовательское событие OnClick. Так чтобы Преодолев это, я сделал следующее:

  1. add CausesValidation = False
  2. добавлен код Validate () и IsValid к событию onClick за страницей, чтобы имитировать сейчас отсутствует автоматически сгенерированный код проверки за кнопкой.

Редактировать 2: полный пример

<asp:Button ID="btnSubmit" runat="server" Text="Submit" OnClientClick="if (Page_ClientValidate()){ return confirm('Do you want to submit this page?')}" CausesValidation="false" />
2 голосов
/ 27 июня 2013

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

     <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 голос
/ 04 января 2009
1 голос
/ 26 сентября 2008

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

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

Я не использовал этот, но мне кажется, что он даст вам подтверждение на стороне клиента, которое вы хотите.

1 голос
/ 26 сентября 2008

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

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

1 голос
/ 26 сентября 2008

Дело в том, что «Подтверждение возврата» срабатывает до JavaScript-кода валидатора. что все связано с жизненными циклами и прочее.

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

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

1 голос
/ 26 сентября 2008

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

0 голосов
/ 25 апреля 2012

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

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
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...