我在这里看到了一些关于在 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/