我有一个简单的表单,它使用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>
这是核心:包含自定义验证器的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事件正确处理验证码结果。
CustomValidator的ServerValidate部分在回发期间工作正常,但我需要它来停止干扰客户端验证。如果我从recaptcha控件中删除CustomValidator,一切都很好。
我是否需要在CustomValidator的clientvalidation函数中执行调用jquery-validate之类的操作才能使其正常工作?
欢迎任何想法或建议。
答案 0 :(得分:1)
事实证明,这个问题的答案是在我的linkbutton上设置CausesValidation =“False”,然后在linkbutton的OnClick处理程序中调用Page.Validate()。
这不是我正在寻找的解决方案,因为每次我想使用recaptcha(或任何自定义验证器)时我都必须记住这些事情,但这似乎现在有用。
答案 1 :(得分:0)
您可以将验证程序的EnableClientScript属性设置为false
:
<asp:CustomValidator id="RecaptchaValidator" runat="server"
ControlToValidate="DummyInput" OnServerValidate="ServerValidate"
ValidateEmptyText="True" EnableClientScript="False" />