我正在使用reCAPTCHA提供的ASP.Net插件和控件。如果Web表单上的提交按钮不在验证组中,我可以成功地使控件生效。 reCAPTCHA控件没有验证组属性。
当网络表单上有验证组时,是否有人使用此解决方案或任何解决方案来使reCAPTCHA控件正常工作?
答案 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)
这对我有用......
使用正确的验证组添加自定义验证程序。
它的ServerValidate方法调用..
recaptcha.Validate();
然后在主要处理之前检查如下...
if(Page.IsValid&amp;&amp; recaptcha.IsValid) { respose.write( “有效”); }
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。