如何使reCAPTCHA与ASP.Net中的ValidationGroup一起使用(验证码)
题
我正在使用 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。
这对我有用......
-
使用正确的验证组添加自定义验证程序。
-
它的ServerValidate方法调用..
recaptcha.Validate();
-
然后在主要处理之前检查如下...
if(Page.IsValid&amp;&amp; recaptcha.IsValid) { respose.write(QUOT;有效&QUOT); }
醇>
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控件的输出,您可能不会意识到导致验证程序占用的更改。
请参阅ReCaptchaImage和ReCaptchaValidator控件作为Altairis Web UI Toolkit的一部分: http://altairiswebui.codeplex.com/一>
它是一组开源的Web组件,包含相当不错的ASP.NET标准(如果我可以说是作者:-)实现ReCaptcha for Web Forms。