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

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

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

7 ответов


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

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


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

<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.


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


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

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

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

    recaptcha.Validate();
    
  3. затем проверьте следующее Перед основной обработкой...

    if (Page.IsValid & & recaptcha.Функция IsValid) { передохнуть.написать ("действительно"); }

HTH.


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
    }
}

чтобы выполнить проверку на стороне клиента и не изменять исходный код 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, вы можете не знать об изменении, приводящем к захвату валидатора для работы.


см. элементы управления ReCaptchaImage и ReCaptchaValidator, являющиеся частью Altairis Web UI Toolkit:http://altairiswebui.codeplex.com/

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