2013-06-05 52 views
4

我正在使用Recaptcha在我的网站上停止垃圾邮件。下面是的RecaptchaRecaptcha在asp.net中不工作

<asp:Panel ID="Panel1" runat="server" style="padding:5px" BackColor="White" 
      BorderColor="#999999" BorderStyle="Solid"> 
      <asp:UpdatePanel ID="UpdatePanel1" runat="server"> 
       <ContentTemplate> 
        <br /> 
        <recaptcha:RecaptchaControl ID="recaptcha" runat="server" 
         PrivateKey="XXXX-HIDDEN-XXXX" 
         PublicKey="XXXX-HIDDEN-XXXX" Theme="Red" /> 
        <br /> 
        <asp:Button ID="Button1" runat="server" onclick="Button1_Click" Text="Submit" /> 
        &nbsp; 
        <asp:Button ID="Button3" runat="server" Text="Cancel" /> 
        &nbsp;<asp:Label ID="lblResult" runat="server" Font-Size="Medium" ForeColor="Red"></asp:Label> 
       </ContentTemplate> 
      </asp:UpdatePanel> 



     </asp:Panel> 
<asp:ModalPopupExtender ID="UpdatePanel1_ModalPopupExtender" runat="server" 
        Enabled="True" PopupControlID="Panel1" TargetControlID="Button2" BackgroundCssClass="modalBackground" CancelControlID="Button3"> 
</asp:ModalPopupExtender> 

代码的代码Button1_Click

protected void Button1_Click(object sender, EventArgs e) 
    { 
     Page.Validate(); 
     if (Page.IsValid) 
     { 
      lblResult.Text = "All Good"; 
     } 
     else 
     { 
      lblResult.Text = "The words you entered are incorrect"; 
     } 
    } 

这段代码的目的是,每当用户进入东西的Recaptcha,如果字是正确的,那么它会显示“所有的好“,如果不是”你输入的字不正确“。

但问题是,当我点击Button1,其Click事件不会执行。但是,当recaptcha未被加载时(即,当互联网未连接时),Button1_Click()执行并且仅执行在if(Page.isValid)条件之外的代码。例如,如果我修改的单击事件是这样的:

protected void Button1_Click(object sender, EventArgs e) 
    { 
     lblResult.Text="Not in if condition"; 
     Page.Validate(); 

     if (Page.IsValid) 
     { 
      lblResult.Text = "All Good"; 
     } 
     else 
     { 
      lblResult.Text = "The words you entered are incorrect"; 
     } 
    } 

然后,它成功地设置lblResult.Text"Not in if condition"。但是,当加载Recaptcha时,即使是If条件以外的行也不会执行。

我试图解决这个问题:

  1. 删除更新面板:同样的问题
  2. 测试实际域:同样的问题
  3. 调试,并检查是否有异常:无异常显示,在输出>调试屏幕

请告诉我有关此问题的任何其他解决方案及其发生的原因。

+0

有人请尽快给我建议尽可能... –

+0

而不是使用整个页面的东西是啥具体有来电:我迫使它来验证,然后检查,如果它在后背部有效固定它你可以使谷歌API。我会建议尝试沿着这些路线。 http://nf2p.com/dot-net/using-recaptcha-with-asp-net-and-c/ – vikingben

回答

2

我也有同样的问题,不要使用控件,直接使用api;即:

标记:

<div> 
    <asp:Literal ID="litResult" runat="server" Mode="Encode" /> 
    <script type="text/javascript" src="http://www.google.com/recaptcha/api/challenge?k=<%= RecaptchaPublicKey %>"> 
    </script> 
    <asp:Button ID="btnSubmit" OnClick="btnSubmit_Click" Text="Submit" runat="server" /> 
</div> 

后面的代码:

private const string RECAPTCHA_CHALLENGE_FIELD = "recaptcha_challenge_field"; 
private const string RECAPTCHA_RESPONSE_FIELD = "recaptcha_response_field"; 

protected string RecaptchaPublicKey { 
    get { return ConfigurationManager.AppSettings["RecaptchaPublicKey"]; } 
} 

protected void btnSubmit_Click(object sender, EventArgs e) { 
    var validator = new Recaptcha.RecaptchaValidator { 
    PrivateKey = ConfigurationManager.AppSettings["RecaptchaPrivateKey"], 
    RemoteIP = Request.UserHostAddress, 
    Challenge = Context.Request.Form[RECAPTCHA_CHALLENGE_FIELD], 
    Response = Context.Request.Form[RECAPTCHA_RESPONSE_FIELD]   
    }; 
    if (validator.Validate().IsValid) { 
    litResult.Text = "All Good"; 
    } else { 
    litResult.Text = "The words you entered are incorrect"; 
    } 
} 
0

没有工作对我也 - 也许是因为我有ValidationGroup集,也许不是。

recaptcha.Validate(); 

if (recaptcha.IsValid) { /* ...do stuff... */ }