c# - updatepanel 内的 recaptchacontrol 问题

标签 c# asp.net-ajax recaptcha

我有一个 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/

相关文章:

c# - 没有 Azure 移动项目的 Azure 推送通知?

c# - 在 ASP.Net ScriptMethod 中获取 session

css - 当部分完成时,如何更新 div css 以显示完整图像?

c# - Recaptcha 客户端验证的理想解决方案

php - reCaptcha 表格样式中断 - 底部似乎有一个额外的边框,按钮周围有白色边框

recaptcha - 具有内容安全策略的reCAPTCHA

c# - 如何格式化字符串 {0 :d MMM YYYY} work?

c# - 以编程方式在 vista 中以管理员身份运行 cmd.exe,C#

c# - 取消主机 yield

asp.net - 使用 ajax 触发异步调用时复选框选中事件的事件名称是什么?