我有一个 recapchavalidator,它位于更新面板内:
<asp:updatepanel runat=server id=updatepanel1>
<cc1:recaptchacontrol runat=server publickey=.. privatekey=.. id=recaptchavalidator1/>
<asp:button runat=server id=button1/>
</updatepanel>
我相信你们中的一些人可以猜到会发生什么。对于那些以前没有经历过这种情况的人来说,验证码控件消失了!如果 recaptchacontrol 返回错误验证,我尝试重定向到同一页面,但这导致了复杂的代码隐藏和 veiwstate 的丢失。 有一个简单的解决方案吗?我在网上看了一些文章,但它们似乎很复杂,而且结构不太好。我需要更改更新面板的内容,因此请记住这一点。
感谢您的帮助。
最佳答案
我只用一个更新面板就可以很好地工作。
<recaptcha:RecaptchaControl Theme="white" ID="recaptcha" runat="server" PrivateKey="your_pub_key "
PublicKey="your_pub_key" />
<asp:ScriptManager ID="ScriptManager1" runat="server">
</asp:ScriptManager>
<asp:UpdatePanel ID="UpdatePanel1" runat="server" UpdateMode="Conditional">
<ContentTemplate>
<asp:Label Visible="false" ID="RecaptchaResult" runat="server" />
<asp:Button ID="RecaptchaButton" runat="server" Text="Submit" onclick="btnSubmit_Click" />
</ContentTemplate>
</asp:UpdatePanel>
关键是将您的更新面板设置为围绕发布按钮的条件,以便您手动调用更新以从服务器端重新加载 recaptcha 控件。
然后,在请求 reload() 后,在面板上调用 .update();
protected void btnSubmit_Click(object sender, EventArgs e)
{
recaptcha.Validate();
if (recaptcha.IsValid)
{
RecaptchaResult.Text = "Success";
RecaptchaResult.Text = "You got it!";
RecaptchaResult.ForeColor = System.Drawing.Color.Green;
RecaptchaResult.Visible = true;
ScriptManager.RegisterClientScriptBlock(this.Page, this.Page.GetType(), "recaptcha", "recaptcha.reload();", true);
UpdatePanel1.Update();
}
else
{
RecaptchaResult.Text = this.recaptcha.ErrorMessage;
RecaptchaResult.ForeColor = System.Drawing.Color.Red;
RecaptchaResult.Visible = true;
ScriptManager.RegisterClientScriptBlock(this.Page, this.Page.GetType(), "recaptcha", "recaptcha.reload();", true);
UpdatePanel1.Update();
}
}
关于c# - updatepanel 内的 recaptchacontrol 问题,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/1622654/