10

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

当 Web 表单上有验证组时,是否有人通过此方法或任何解决方案使 reCAPTCHA 控件正常工作?

4

7 回答 7

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

于 2012-09-05T14:06:44.703 回答
5

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

于 2009-03-18T03:36:27.487 回答
4

reCAPTCHA ASP.NET 插件被编写为向后兼容 ASP.NET 1.1,这意味着ValidationGroup不支持该概念(这是 ASP.NET 2.0 中的新概念)。但该插件自带可下载源代码,您可以自行修改支持ValidationGroup

在 ASP.NET 2.0 中,验证器应该继承自BaseValidator并实现IValidator,这意味着您应该将 RecaptchaControl 类型更改为继承自BaseValidator而不是WebControl. 然后,您将不得不稍微修改代码以实现在BaseValidator. 然后你可以在你的页面上使用这个新控件,它现在支持ValidationGroup.

于 2008-12-09T11:26:43.763 回答
2

这对我有用...

  1. 添加具有正确验证组的自定义验证器。

  2. 它的 ServerValidate 方法调用..

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

    if (Page.IsValid && recaptcha.IsValid) { respose.write("valid"); }

HTH。

于 2010-12-07T18:32:55.440 回答
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
    }
}
于 2013-01-28T18:24:08.007 回答
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 控件的输出,您可能不知道导致验证器占用工作的更改。

于 2013-04-05T06:19:42.870 回答
0

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

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

于 2011-01-11T21:49:27.617 回答