我使用的是reCAPTCHA提供的ASP.NET插件和控件。如果web窗体上的“提交”按钮不在验证组中,我可以成功地使控件工作。reCAPTCHA控件没有validationgroup属性。有没有人在这方面取得了任何成功,或者有任何解决方案可以让reCAPTCHA控件在Web表单上有验证组时工作?
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的想法。
dxxyhpgq2#
您可以添加CustomValidator,实现OnServerValidator来验证ReCAPTCHA数据。CustomValidator可以分配给任何ValidatorGroup。
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。
ValidationGroup
BaseValidator
IValidator
WebControl
41ik7eoe4#
这对我很有效…1.使用正确的验证组添加自定义验证器。1.它的ServerControl方法调用..
recaptcha.Validate();
1.然后在您的主要处理之前检查如下.if(Page.IsValid && recaptcha.IsValid){ respose.write(“valid”);}
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 } }
jgovgodb6#
为了在不改变reCaptcha源代码的情况下进行客户端所需的验证,我在表单中添加了一个CustomValidator,并创建了一个JavaScript函数来验证输入文本字段。
<asp:CustomValidator ID="reqRecaptcha" runat="server" ClientValidationFunction="validateRecaptcha" Text="Required"></asp:CustomValidator>
为了找出生成的输入字段的ID,我查看了页面的源代码,注意到输入字段总是recaptcha_response_field。(如果我错了,请纠正我)知道这一点,我能够创建JavaScript(使用JQuery和一个自定义函数来检查控件的有效性)。
ID
recaptcha_response_field
function validateRecaptcha(sender, args) { args.IsValid = isFieldValid("input[id$='recaptcha_response_field']"); }
注意:如果开发人员更改了reCaptcha控件的输出,您可能不知道更改会导致验证器停止工作。
qnakjoqk7#
请参阅作为Altairis Web UI工具包一部分的ReCaptchaImage和ReCaptchaValidator控件:http://altairiswebui.codeplex.com/它是一组开源的Web组件,包含相当不错的、符合ASP.NET标准的(如果我可以说它是作者的话:-)ReCaptcha for Web Forms的实现。
7条答案
按热度按时间vom3gejh1#
我想我只是扩展了一些其他人的评论与一些工作代码.
和代码背后...
有谁能想到一个更简单的方法吗?感谢Vidalik对使用OnServerServer的想法。
dxxyhpgq2#
您可以添加CustomValidator,实现OnServerValidator来验证ReCAPTCHA数据。CustomValidator可以分配给任何ValidatorGroup。
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
。41ik7eoe4#
这对我很有效…
1.使用正确的验证组添加自定义验证器。
1.它的ServerControl方法调用..
1.然后在您的主要处理之前检查如下.
if(Page.IsValid && recaptcha.IsValid){ respose.write(“valid”);}
ff29svar5#
RemotecUk的建议对我很有效,没有添加自定义验证器。
jgovgodb6#
为了在不改变reCaptcha源代码的情况下进行客户端所需的验证,我在表单中添加了一个CustomValidator,并创建了一个JavaScript函数来验证输入文本字段。
为了找出生成的输入字段的
ID
,我查看了页面的源代码,注意到输入字段总是recaptcha_response_field
。(如果我错了,请纠正我)知道这一点,我能够创建JavaScript(使用JQuery和一个自定义函数来检查控件的有效性)。注意:如果开发人员更改了reCaptcha控件的输出,您可能不知道更改会导致验证器停止工作。
qnakjoqk7#
请参阅作为Altairis Web UI工具包一部分的ReCaptchaImage和ReCaptchaValidator控件:http://altairiswebui.codeplex.com/
它是一组开源的Web组件,包含相当不错的、符合ASP.NET标准的(如果我可以说它是作者的话:-)ReCaptcha for Web Forms的实现。