我正在使用 reCAPTCHA 提供的ASP.Net插件和控件。如果Web表单上的提交按钮不在验证组中,我可以成功地使控件生效。 reCAPTCHA控件没有验证组属性。

当网络表单上有验证组时,是否有人使用此解决方案或任何解决方案来使reCAPTCHA控件正常工作?

有帮助吗?

解决方案

reCAPTCHA ASP.NET插件编写为与ASP.NET 1.1向后兼容,这意味着不支持 ValidationGroup 概念(ASP.NET 2.0中的新增功能)。但该插件附带可下载的源代码,所以你可以自己修改它以支持 ValidationGroup

在ASP.NET 2.0中,验证程序应继承自 BaseValidator 并实现 IValidator ,这意味着您应该将RecaptchaControl类型更改为继承自 BaseValidator 而不是的WebControl 。然后,您必须稍微修改一下代码,以实现 BaseValidator 中定义的所有方法和属性。然后,您可以在页面上使用此新控件,现在支持 ValidationGroup

其他提示

以为我只是通过一些工作代码来扩展其他人的评论......

<recaptcha:RecaptchaControl ID="RecaptchaControl" runat="server" />

<asp:CustomValidator ID="RecaptchaValidator" runat="server" OnServerValidate="RecaptchaValidator_ServerValidate" ErrorMessage="Recaptcha input invalid." ValidationGroup="SomeValidationGroup" />

代码背后......

protected void RecaptchaValidator_ServerValidate(object sender, ServerValidateEventArgs e)
{
    this.RecaptchaControl.Validate();
    e.IsValid = this.RecaptchaControl.IsValid;
}

有人能想到更简单的方法吗?感谢Vidalik关于使用OnServerValidate的想法。

您可以添加CustomValidator,实现将验证ReCAPTCHA数据的OnServerValidate。可以将CustomValidator分配给任何ValidatorGroup。

这对我有用......

  1. 使用正确的验证组添加自定义验证程序。

  2. 它的ServerValidate方法调用..

    recaptcha.Validate();
    
  3. 然后在主要处理之前检查如下...

    if(Page.IsValid&amp;&amp; recaptcha.IsValid) { respose.write(QUOT;有效&QUOT); }

  4. HTH。

RemotecUk 的建议对我有用,无需添加自定义验证器。

protected void button_onclick(object sender, EventArgs e){
    recaptcha.Validate();
    if(!Page.IsValid && recaptcha.IsValid){
        lblError.Text = "Please check your captcha entry";
    } else {
        //do your thing
    }
}

要进行客户端所需的验证并且不更改reCaptcha源代码,我在表单中添加了一个CustomValidator并创建了一个JavaScript函数来验证输入文本字段。

<asp:CustomValidator ID="reqRecaptcha" runat="server" ClientValidationFunction="validateRecaptcha" Text="Required"></asp:CustomValidator>

要找出生成的输入字段的 ID ,我查看了页面的源代码,发现输入字段始终是 recaptcha_response_field 。 (如果我错了,请纠正我)了解这一点,我能够创建JavaScript(使用JQuery和自定义函数来检查控件的有效性)。

    function validateRecaptcha(sender, args) {
        args.IsValid = isFieldValid("input[id$='recaptcha_response_field']");
    }

注意:如果开发人员更改了reCaptcha控件的输出,您可能不会意识到导致验证程序占用的更改。

scroll top