【问题标题】:ASP.NET CustomValidator control interferes with jQuery validation on form submissionASP.NET CustomValidator 控件干扰表单提交时的 jQuery 验证
【发布时间】:2011-06-06 19:42:18
【问题描述】:

我有一个简单的表单,它使用 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 之类的操作才能使其正常工作?

欢迎提出任何想法或建议。

【问题讨论】:

    标签: asp.net jquery-validate customvalidator


    【解决方案1】:

    所以这个问题的答案是在我的链接按钮上设置 CausesValidation="False",然后在链接按钮的 OnClick 处理程序中调用 Page.Validate()。

    这并不是我一直在寻找的解决方案,因为每次我想使用 recaptcha(或任何自定义验证器)时,我都必须记住做这些事情,但这似乎目前可行。

    【讨论】:

      【解决方案2】:

      您可以将验证器的EnableClientScript 属性设置为false

      <asp:CustomValidator id="RecaptchaValidator" runat="server"
          ControlToValidate="DummyInput" OnServerValidate="ServerValidate"
          ValidateEmptyText="True" EnableClientScript="False" />
      

      【讨论】:

      • 这并没有把我带到我需要去的地方,但让我走上了正确的轨道。感谢您的帮助。
      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2011-03-26
      相关资源
      最近更新 更多