Элемент управления ASP.NET CustomValidator мешает проверке jQuery при отправке формы

У меня есть простая форма, в которой используется проверка jQuery для уведомления пользователя об ошибках ввода и т. Д. Когда я добавляю в форму ASP.NET CustomValidator, страница отправляется обратно и пропускает проверку jQuery. Мне нужно, чтобы форма не отправлялась на сервер до тех пор, пока проверка клиента не будет правильной. Кто-нибудь видел это раньше?

Это моя форма:

<form id="form1" runat="server">  
    <core:standardscriptmanager runat="server" />
    <div>
        <asp:textbox id="Email" name="Email" runat="server" cssclass="_RegisterFormValidate FormField Email {required:true, email:true, messages:{required:'You must enter an email address.', email:'Please enter a valid email address.'}}" maxlength="200" columns="75" width="98%" tooltip="Your email address"></asp:textbox>
        <br /><br />
        <core:recaptcha runat="server" />
        <br />
        <asp:linkbutton id="CreateAccount" runat="server" onclick="CreateAccount_Click" text="create"></asp:linkbutton>
    </div>
</form>

И это элемент управления core: recaptcha, который содержит настраиваемый валидатор:

<script type="text/javascript"
 src="http://www.google.com/recaptcha/api/challenge?k=XXXKEY">
</script>
<noscript>
 <iframe src="http://www.google.com/recaptcha/api/noscript?k=XXXKEY"
     height="300" width="500" frameborder="0"></iframe><br>
 <textarea name="recaptcha_challenge_field" rows="3" cols="40">
 </textarea>
 <input type="hidden" name="recaptcha_response_field"
     value="manual_challenge">
</noscript>

<asp:customvalidator id="RecaptchaValidator" runat="server" controltovalidate="DummyInput" onservervalidate="ServerValidate" validateemptytext="true" />
<asp:textbox id="DummyInput" runat="server" cssclass="Hidden"></asp:textbox>

Примечание. DummyInput нужен только для того, чтобы сделать CustomValidator счастливым, мое событие ServerValidate правильно обрабатывает результаты проверки капчи.

Часть ServerValidate CustomValidator работает нормально во время обратной передачи, но мне нужно, чтобы она перестала мешать проверке на стороне клиента. Если я удалю CustomValidator из элемента управления recaptcha, все будет работать нормально.

Нужно ли мне делать что-то вроде вызова jquery-validate в функции clientvalidation CustomValidator, чтобы это работало правильно?

Любые мысли или предложения приветствуются.


person Brent Keller    schedule 10.01.2011    source источник


Ответы (2)


Итак, выяснилось, что ответ на эту проблему заключался в том, чтобы установить CausesValidation = "False" на моей кнопке ссылки, а затем вызвать Page.Validate () в обработчике OnClick кнопки ссылки.

Это не совсем то решение, которое я искал, так как мне придется помнить о том, что нужно делать это каждый раз, когда я хочу использовать recaptcha (или любой настраиваемый валидатор, если на то пошло), но, похоже, на данный момент это работает.

person Brent Keller    schedule 11.01.2011

Вы можете установить EnableClientScript свойство вашего валидатора на false:

<asp:CustomValidator id="RecaptchaValidator" runat="server"
    ControlToValidate="DummyInput" OnServerValidate="ServerValidate"
    ValidateEmptyText="True" EnableClientScript="False" />
person Frédéric Hamidi    schedule 10.01.2011
comment
Это не совсем привело меня туда, где мне нужно быть, но на правильном пути. Спасибо за помощь. - person Brent Keller; 11.01.2011