如何使reCAPTCHA与ASP.NET中的ValidationGroup一起工作(captcha)

hjqgdpho  于 2023-10-21  发布在  .NET
关注(0)|答案(7)|浏览(134)

我使用的是reCAPTCHA提供的ASP.NET插件和控件。如果web窗体上的“提交”按钮不在验证组中,我可以成功地使控件工作。reCAPTCHA控件没有validationgroup属性。
有没有人在这方面取得了任何成功,或者有任何解决方案可以让reCAPTCHA控件在Web表单上有验证组时工作?

vom3gejh

vom3gejh1#

我想我只是扩展了一些其他人的评论与一些工作代码.

<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对使用OnServerServer的想法。

dxxyhpgq

dxxyhpgq2#

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

tuwxkamq

tuwxkamq3#

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

41ik7eoe

41ik7eoe4#

这对我很有效…
1.使用正确的验证组添加自定义验证器。
1.它的ServerControl方法调用..

recaptcha.Validate();

1.然后在您的主要处理之前检查如下.
if(Page.IsValid && recaptcha.IsValid){ respose.write(“valid”);}

ff29svar

ff29svar5#

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

jgovgodb6#

为了在不改变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控件的输出,您可能不知道更改会导致验证器停止工作。

qnakjoqk

qnakjoqk7#

请参阅作为Altairis Web UI工具包一部分的ReCaptchaImage和ReCaptchaValidator控件:http://altairiswebui.codeplex.com/
它是一组开源的Web组件,包含相当不错的、符合ASP.NET标准的(如果我可以说它是作者的话:-)ReCaptcha for Web Forms的实现。

相关问题