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

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

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

Стоит ли изучать PHP в 2026-2027 годах?
Стоит ли изучать PHP в 2026-2027 годах?
Привет всем, сегодня я хочу высказать свои соображения по поводу вопроса, который я уже много раз получал в своем сообществе: "Стоит ли изучать PHP в...
Поведение ключевого слова "this" в стрелочной функции в сравнении с нормальной функцией
Поведение ключевого слова "this" в стрелочной функции в сравнении с нормальной функцией
В JavaScript одним из самых запутанных понятий является поведение ключевого слова "this" в стрелочной и обычной функциях.
Приемы CSS-макетирования - floats и Flexbox
Приемы CSS-макетирования - floats и Flexbox
Здравствуйте, друзья-студенты! Готовы совершенствовать свои навыки веб-дизайна? Сегодня в нашем путешествии мы рассмотрим приемы CSS-верстки - в...
Тестирование функциональных ngrx-эффектов в Angular 16 с помощью Jest
В системе управления состояниями ngrx, совместимой с Angular 16, появились функциональные эффекты. Это здорово и делает код определенно легче для...
Концепция локализации и ее применение в приложениях React ⚡️
Концепция локализации и ее применение в приложениях React ⚡️
Локализация - это процесс адаптации приложения к различным языкам и культурным требованиям. Это позволяет пользователям получить опыт, соответствующий...
Пользовательский скаляр GraphQL
Пользовательский скаляр GraphQL
Листовые узлы системы типов GraphQL называются скалярами. Достигнув скалярного типа, невозможно спуститься дальше по иерархии типов. Скалярный тип...
10
0
12 425
7
Перейти к ответу Данный вопрос помечен как решенный

Ответы 7

Ответ принят как подходящий

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

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

Привет, бзлм. Я сделал это, но у меня две проблемы: 1) BaseValidator также требует, чтобы вы реализовали абстрактный метод EvaluateIsValid () (повторное использование свойства IsValid не работает). 2) Затем элементу управления reCaptcha необходимо заполнить свойство ControlToValidate. Вы можете помочь с любым из них? Спасибо.

Nick 10.06.2009 13:36

Я закомментировал реализацию IValidator, предоставляемую плагином reCAPTCHA, и вставил эту логику в метод EvaluateIsValid (). Я также обошел свойство ControlToValidate в коде, поскольку оно, похоже, не применимо в этом сценарии. Еще один момент, который следует понять, - это то, что вы должны обрабатывать ситуации, когда проверка вызывается более одного раза на странице. Вам нужно убедиться, что вы фактически не вызываете reCAPTCHA API дважды, так как это сделает элемент управления недействительным. Надеюсь это поможет.

rifferte 13.06.2009 07:27

Привет, можно ли получить дополнительную информацию о том, как это сделать? Или у кого-то уже есть завершенный проект, которым можно поделиться?

TimS 11.11.2009 18:03

@TimS, ты пробовал это?

bzlm 14.11.2011 20:11

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

Хорошее решение. Тогда вам просто нужно проверить recaptcha.IsValid в вашем методе OnServerValidate. Очень просто!

Obfuskater 10.08.2010 08:26

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

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

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

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

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

HTH.

Разве это не то же самое, что и в этом ответе: stackoverflow.com/questions/231344/…

bzlm 11.12.2010 21:07

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

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

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

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

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

Предложение 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, вы можете не знать об изменении, которое приводит к прекращению работы валидатора.

isFieldValid("input[id$='recaptcha_response_field']"); также может быть isFieldValid("#recaptcha_response_field");. Моя исходная ссылка - это стандарт, который у меня есть, поэтому я могу легко создавать CustomValidator для серверных элементов управления.
Clarice Bouwer 05.04.2013 10:21

Другие вопросы по теме