我正在尝试在一个.net 1.1项目中使用旧版本的Recaptcha Validator,可以在这里找到:http://recaptcha.googlecode.com/svn/trunk/recaptcha-plugins/dotnet-old/src/Recaptcha/
我的代码与上面的链接中的示例非常相似:
<asp:TextBox ID="EmailAddress" runat="server"></asp:TextBox>
<recatpcha:RecaptchaValidator ID="RecaptchaValidator1" runat="server" Theme="Clean" PublicKey="xxxxxxxxxxxxxx" PrivateKey="xxxxxxxxxx" ControlToValidate="EmailAddress"></recatpcha:RecaptchaValidator>
<asp:Button ID="Button1" runat="server" Text="Button" CausesValidation="true" OnClick="Button1_Click" />我想要的行为很简单:在页面加载时,用户会看到一个字段来输入他们的电子邮件地址,一个验证码来完成,还有一个提交按钮。在提交时,如果在我们的数据库中没有找到具有该电子邮件地址的用户,或者验证码回答错误,则会显示一个新的验证码以及相应的错误消息。否则,他们将收到一封关于如何重置其密码的电子邮件。
主要问题是验证码在页面加载时不显示。但是,当我点击submit按钮,触发Page.Validate()时,页面会重新加载,验证码也会显示出来。
基于此,我认为我应该尝试一种不同的方法,并在页面加载事件中调用Page.Validate()以使验证码最初显示出来。这几乎是有效的:验证码在第一个页面加载时显示,但当提交一个无效的电子邮件和正确的验证码答案时,验证码在页面重新加载时消失,但当然,电子邮件无法发送。
如何在页面初始命中时强制呈现验证码,或者在输入无效的电子邮件地址时阻止提交验证码?
发布于 2010-04-07 05:48:06
嗯,不是很漂亮,但我把它修好了。
由于使用RecaptchaValidator标记没有按照我想要的方式工作,因此我使用recaptcha AJAX API (http://recaptcha.net/apidocs/captcha/client.html)将小部件嵌入到页面上:
$(document).ready(function() {
Recaptcha.create("<public key>",
"ReCaptcha", {
theme: "clean",
callback: Recaptcha.focus_response_field
});
});然后,由于所有数据都需要使用recaptcha服务器进行验证(挑战、公钥等更多信息:http://recaptcha.net/apidocs/captcha/)都在POST中,所以我实例化了一个新的RecaptchaValidator,设置了其余的属性,并调用了验证用户响应的方法。
protected void Submit_Click(object sender, System.EventArgs e)
{
RecaptchaValidator RecaptchaValidator1 = new RecaptchaValidator();
RecaptchaValidator1.Page = this;
RecaptchaValidator1.PrivateKey = "<private key>";
RecaptchaValidator1.PublicKey = "<public key>";
bool CaptchaPassed = RecaptchaValidator1.ValidateUserResponse();
if (CaptchaPassed)
{
//hide the captcha, do some stuff
}
}诚然,这有点老生常谈,但它已经完成了工作。
注意-我在问题中提到了这一点,但只是重申一下:服务器端代码使用旧的、兼容.NET 1.1的recaptcha插件。问题中提供了插件代码的链接。我有令人尴尬的低代表,不能使用更多的超链接>.<
https://stackoverflow.com/questions/2556274
复制相似问题