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

StackOverflow https://stackoverflow.com/questions/231344

  •  04-07-2019
  •  | 
  •  

Вопрос

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

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

Это было полезно?

Решение

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

В 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) {sprose.write ("value");}

ХТХ.

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, вы можете не знать об этом изменении, в результате чего валидатор начнет работать.

scroll top