我在这里看到了几个关于使用Recaptcha和ASP.net UpdatePanels的其他帖子,但还没有找到解决我的问题的答案.
这是我的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要更新.
我无法完全重新加载页面,因为这一切都显示为页面顶部的叠加层,页面后面还有其他表单字段.
请帮忙!
编辑:
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 }); } }); }