我正在使用reCAPTCHA提供的 ASP.Net 插件和控件。如果 web 表单上的提交按钮不在验证组中,我可以成功地使控件工作。reCAPTCHA 控件没有验证组属性。
当 Web 表单上有验证组时,是否有人通过此方法或任何解决方案使 reCAPTCHA 控件正常工作?
以为我会用一些工作代码来扩展其他一些人的评论......
<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。
reCAPTCHA ASP.NET 插件被编写为向后兼容 ASP.NET 1.1,这意味着ValidationGroup
不支持该概念(这是 ASP.NET 2.0 中的新概念)。但该插件自带可下载源代码,您可以自行修改支持ValidationGroup
。
在 ASP.NET 2.0 中,验证器应该继承自BaseValidator
并实现IValidator
,这意味着您应该将 RecaptchaControl 类型更改为继承自BaseValidator
而不是WebControl
. 然后,您将不得不稍微修改代码以实现在BaseValidator
. 然后你可以在你的页面上使用这个新控件,它现在支持ValidationGroup
.
这对我有用...
添加具有正确验证组的自定义验证器。
它的 ServerValidate 方法调用..
recaptcha.Validate();
然后在您的主要处理之前检查如下...
if (Page.IsValid && recaptcha.IsValid) { respose.write("valid"); }
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 控件的输出,您可能不知道导致验证器占用工作的更改。
请参阅作为 Altairis Web UI 工具包一部分的 ReCaptchaImage 和 ReCaptchaValidator 控件:http: //altairiswebui.codeplex.com/
它是一组开源的 Web 组件,包含相当不错且符合 ASP.NET 标准的(如果我可以说它是作者 :-) 用于 Web 窗体的 ReCaptcha 实现。