如何使reCAPTCHA与ASP.Net中的ValidationGroup一起使用(验证码)

时间:2008-10-23 20:24:54

标签: asp.net captcha recaptcha

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

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

7 个答案:

答案 0 :(得分:7)

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

<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的想法。

答案 1 :(得分:5)

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

答案 2 :(得分:4)

reCAPTCHA ASP.NET插件编写为与ASP.NET 1.1向后兼容,这意味着不支持ValidationGroup概念(ASP.NET 2.0中的新增功能)。但插件附带downloadable source code,因此您可以自行修改以支持ValidationGroup

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

答案 3 :(得分:2)

这对我有用......

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

  2. 它的ServerValidate方法调用..

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

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

  4. HTH。

答案 4 :(得分:1)

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
    }
}

答案 5 :(得分:1)

要进行客户端所需的验证并且不更改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控件的输出,您可能不会意识到导致验证程序占用的更改。

答案 6 :(得分:0)

请参阅ReCaptchaImage和ReCaptchaValidator控件作为Altairis Web UI Toolkit的一部分:http://altairiswebui.codeplex.com/

它是一组开源的Web组件,包含相当不错的ASP.NET标准(如果我可以说是作者:-)实现ReCaptcha for Web Forms。