Мы использовали reCAPTCHA в нашем проекте ASP.NET и без проблем отправили капчу из ascx в код за страницей (на стороне сервера). Однако после марта 2018 года нам пришлось обновить капчу до v2 и внести следующие изменения:
Контроль пользователя (cs):
....
protected Recaptcha.Web.UI.Controls.Recaptcha Captcha;
protected override Recaptcha.Web.UI.Controls.Recaptcha ReCaptcha
{ get { return this.Captcha; } }
protected void btnSend_Click(object sender, EventArgs e)
{
if (this.Submit(sender))
this.mvMain.ActiveViewIndex++;
}
1010 *
*
reCAPTCHA v1 (ascx): В этой версии ключ сайта определен в web.config.
<%@ Control Language="C#" AutoEventWireup="true" Inherits="Tools.WebUI._ContactForm"%>
<%@ Register Assembly="Recaptcha.Web" Namespace="Recaptcha.Web.UI.Controls" TagPrefix="cc1"%>
<asp:MultiView ID="mvMain" ActiveViewIndex="0" runat="server">
<asp:View runat="server">
<div id="divCaptcha">
<!-- code omitted for brevity -->
<div id="captcha">
<cc1:Recaptcha ID="Captcha" Theme="Clean" runat="server" />
</div>
<asp:TextBox ID="txtBotCheck" style="display:none !important" runat="server" />
<asp:Button ID="btnSend" runat="server" OnClick="btnSend_Click" />
<asp:Label ID="lblMessage" runat="server" CssClass="captchaMessage"></asp:Label>
</div>
</asp:View>
<asp:View runat="server">
Message was sent...
</asp:View>
</asp:MultiView>
reCAPTCHA v2 (ascx):
<%@ Control Language="C#" AutoEventWireup="true" Inherits="Crema.Tools.WebUI._ContactForm"%>
<%@ Register Assembly="Recaptcha.Web" Namespace="Recaptcha.Web.UI.Controls" TagPrefix="cc1"%>
<asp:MultiView ID="mvMain" ActiveViewIndex="0" runat="server">
<asp:View runat="server">
<script src="http://www.google.com/recaptcha/api.js" async defer></script>
<div id="divCaptcha">
<!-- code omitted for brevity -->
<div id="captcha">
<div class="g-recaptcha" data-sitekey="tlcUAAACV...............FhQ"></div>
</div>
<asp:TextBox ID="txtBotCheck" style="display:none !important" runat="server" />
<asp:Button ID="btnSend" runat="server" OnClick="btnSend_Click" />
<asp:Label ID="lblMessage" runat="server" CssClass="captchaMessage"></asp:Label>
</div>
</asp:View>
<asp:View runat="server">
Message was sent...
</asp:View>
</asp:MultiView>
При отправке этой формы мы столкнулись с ошибкой pge, и в соответствующих журналах произошла следующая ошибка. С другой стороны, когда мы смотрим на сеть Firebug, мы наблюдаем g-recaptcha-response , но не наблюдаем параметр captcha, даже если мы используем свойство "name" с name = "captcha".
Информация об исключении:
Тип исключения: NullReferenceException
Сообщение об исключении: ссылка на объект не установлена для экземпляра объекта.
at Tools.Domain.FormUserControl.Submit (Отправитель объекта)
в Tools.WebUI._ContactForm.btnSend_Click (Отправитель объекта, EventArgs e)
в System.Web.UI.WebControls.Button.RaisePostBackEvent (String eventArgument)
в System.Web.UI.Page.ProcessRequestMain (логическое значение includeStagesBeforeAsyncPoint, логическое значение includeStagesAfterAsyncPoint)
Есть идеи?