asp.net - Recaptcha 在 PostBack 期间消失

标签 asp.net updatepanel recaptcha

我在这里看到了一些关于在 ASP.net UpdatePanels 中使用 Recaptcha 的其他帖子,但还没有找到解决我的问题的答案。

这是我的 ASPX 代码:

<asp:UpdatePanel ID="updRecaptcha" runat="server" UpdateMode="Always">
 <ContentTemplate>
  <recaptcha:RecaptchaControl ID="btnrecaptcha" runat="server" Theme="clean" PrivateKey"<%$ Resources: General, CaptchaPrivateKey %>" PublicKey="<%$ Resources: General, CaptchaPublicKey %>" />        
  <asp:Label ID="recaptchaerror" runat="server" style="color: Red;"/>
 </ContentTemplate>
</asp:UpdatePanel>

因此 Recaptcha 控件位于使用多个 .Net 验证控件(例如 RequiredFieldValidator)的用户控件中。在允许该过程继续之前,我需要验证 Recaptcha 和 ASP.net 控件。

如果任何验证失败(Recaptcha 或 .Net),则 Recaptcha 控件消失。查看 HTML 源代码,在回发后根本没有加载控件 - 尽管我告诉 UpdatePanel 进行更新。

我无法完全重新加载页面,因为这一切都显示为页面顶部的叠加层,并且页面后面还有其他表单字段。

请帮忙!

编辑:

当 Recaptcha 失败时,我从 C# 调用此代码:
ScriptManager.RegisterClientScriptBlock(Page, Page.GetType(), "InvalidRecaptcha", "alert('Recaptcha Failed');Recaptcha.reload();alert('Recaptcha Reloaded');", true);

两个警报语句都会触发,但 Recaptcha 仍然没有加载。

最佳答案

忘记 ScriptManager。您所需要的只是页面中的这个脚本。相应地更改您的标识符:

<script type="text/javascript">
// RECAPTURE CODE FOR RELOADING AFTER INCORRECT ENTRY
if (typeof Sys != 'undefined') {
    var requestManager = Sys.WebForms.PageRequestManager.getInstance();
    requestManager.add_endRequest(function(sender, args) {

        $('<div id="recaptcha_widget_div"/>').appendTo('#recaptcha_widget_div2');

        if (typeof Recaptcha != 'undefined') {                                
            Recaptcha.create(recaptcha_key, "recaptcha_widget_div",
            {
                theme: "red",
                callback: Recaptcha.focus_response_field
            });
        }
    });
}

关于asp.net - Recaptcha 在 PostBack 期间消失,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/8942884/

相关文章:

c# - 如何使 EF 查询返回 MVC 5 ASP.NET 中多对多关系表的聚合值

jquery - 回发后元素在 jQuery 对象中保留原始值

c# - 通过更新面板请求调用回传

javascript - 如何在验证码验证后启用react-google-recaptcha中的输入按钮?

recaptcha - 具有图像选择挑战的企业 reCaptcha

c# - 将存储过程添加到 DBML 不会生成 *.designer.cs 代码

asp.net - 在 ASP.Net 中响应 HTTP Post

c# - 我们如何从 asp.net 服务器端脚本调用客户端脚本?

asp.net - 如何在更新面板之外更新控件?

javascript - 输入:email in js