Как заставить reCAPTCHA работать с ValidationGroup в ASP.Net(captcha)

Я использую плагин ASP.Net и управление, предоставляемые reCAPTCHA. Я могу успешно заставить управление работать, если кнопка отправки в веб-форме не находится в группе validation. Для элемента reCAPTCHA нет атрибута validationgroup.

Кто-нибудь имел успех с этим или любыми решениями, чтобы заставить элемент управления reCAPTCHA работать, когда в веб-форме есть группа validation?

Ответ 1

Плагин reCAPTCHA ASP.NET написан для обратной совместимости с ASP.NET 1.1, что означает, что концепция ValidationGroup (которая является новой в ASP.NET 2.0) не поддерживается. Но плагин поставляется с загружаемым исходным кодом, поэтому вы можете изменить его самостоятельно, чтобы поддерживать ValidationGroup.

В ASP.NET 2.0 валидаторы должны наследовать от BaseValidator и реализовать IValidator, что означает, что вы должны изменить тип RecaptchaControl наследовать от BaseValidator вместо WebControl. Затем вам придется немного изменить код, чтобы реализовать все методы и свойства, определенные в BaseValidator. Затем вы можете использовать этот новый элемент управления на своей странице, который теперь поддерживает ValidationGroup.

Ответ 2

Думал, что я просто расширю комментарии некоторых других с некоторым рабочим кодом...

<recaptcha:RecaptchaControl ID="RecaptchaControl" runat="server" />

<asp:CustomValidator ID="RecaptchaValidator" runat="server" OnServerValidate="RecaptchaValidator_ServerValidate" ErrorMessage="Recaptcha input invalid." ValidationGroup="SomeValidationGroup" />

И код позади...

protected void RecaptchaValidator_ServerValidate(object sender, ServerValidateEventArgs e)
{
    this.RecaptchaControl.Validate();
    e.IsValid = this.RecaptchaControl.IsValid;
}

Может ли кто-нибудь подумать об более простом способе этого? Престижность к Vidalik за мысли об использовании OnServerValidate.

Ответ 3

Вы можете добавить CustomValidator, реализовать OnServerValidate, который будет проверять данные ReCAPTCHA. CustomValidator может быть назначен любой группе ValidatorGroup.

Ответ 4

Это сработало для меня...

  • Добавить пользовательский валидатор с правильной группой проверки.

  • Его вызов метода ServerValidate..

    recaptcha.Validate();
    
  • Затем перед вашей основной обработкой проверьте следующее:

    if (Page.IsValid & recaptcha.IsValid) { respose.write( "действительный" ); }

НТН.

Ответ 5

RemotecUk предложение работало для меня без добавления пользовательского валидатора.

protected void button_onclick(object sender, EventArgs e){
    recaptcha.Validate();
    if(!Page.IsValid && recaptcha.IsValid){
        lblError.Text = "Please check your captcha entry";
    } else {
        //do your thing
    }
}

Ответ 6

Чтобы выполнить требуемую проверку на стороне клиента и не изменяя исходный код reCaptcha, я добавил CustomValidator в свою форму и создал функцию JavaScript для проверки входного текстового поля.

<asp:CustomValidator ID="reqRecaptcha" runat="server" ClientValidationFunction="validateRecaptcha" Text="Required"></asp:CustomValidator>

Чтобы узнать ID сгенерированного поля ввода, я посмотрел исходный код страницы и заметил, что поле ввода всегда recaptcha_response_field. (Пожалуйста, поправьте меня, если я ошибаюсь). Зная это, я смог создать JavaScript (используя JQuery и настраиваемую функцию для проверки правильности элемента управления).

    function validateRecaptcha(sender, args) {
        args.IsValid = isFieldValid("input[id$='recaptcha_response_field']");
    }

ПРИМЕЧАНИЕ. Если разработчики изменяют вывод элемента управления reCaptcha, вы можете не знать об изменениях, приводящих к срабатыванию проверки валидатора.

Ответ 7

См. элементы управления ReCaptchaImage и ReCaptchaValidator, входящие в набор инструментов Altairis Web UI Toolkit: http://altairiswebui.codeplex.com/

Это набор веб-компонентов с открытым исходным кодом, содержащий вполне приличные и совместимые с ASP.NET стандарты (если можно сказать, что это автор:-) реализация ReCaptcha для веб-форм.