Я использую плагин ASP.Net и управление, предоставляемое reCAPTCHA. Я могу успешно заставить элемент управления работать, если кнопка отправки в веб-форме не находится в группе проверки. Атрибут validationgroup для элемента управления reCAPTCHA отсутствует.
Кто-нибудь добился успеха с этим или какими-либо решениями, чтобы заставить работать элемент управления 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.
Я закомментировал реализацию IValidator, предоставляемую плагином reCAPTCHA, и вставил эту логику в метод EvaluateIsValid (). Я также обошел свойство ControlToValidate в коде, поскольку оно, похоже, не применимо в этом сценарии. Еще один момент, который следует понять, - это то, что вы должны обрабатывать ситуации, когда проверка вызывается более одного раза на странице. Вам нужно убедиться, что вы фактически не вызываете reCAPTCHA API дважды, так как это сделает элемент управления недействительным. Надеюсь это поможет.
Привет, можно ли получить дополнительную информацию о том, как это сделать? Или у кого-то уже есть завершенный проект, которым можно поделиться?
@TimS, ты пробовал это?
Вы можете добавить CustomValidator, реализовать OnServerValidate, который будет проверять данные ReCAPTCHA. CustomValidator можно назначить любой ValidatorGroup.
Хорошее решение. Тогда вам просто нужно проверить recaptcha.IsValid в вашем методе OnServerValidate. Очень просто!
Это сработало для меня ...
Добавьте настраиваемый валидатор с правильной группой проверки.
Его вызов метода ServerValidate ..
recaptcha.Validate();
Затем перед основной обработкой проверьте следующее ...
if (Page.IsValid && recaptcha.IsValid) { respose.write ("действительный"); }
HTH.
Разве это не то же самое, что и в этом ответе: stackoverflow.com/questions/231344/…
См. Элементы управления 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 для серверных элементов управления.
Привет, бзлм. Я сделал это, но у меня две проблемы: 1) BaseValidator также требует, чтобы вы реализовали абстрактный метод EvaluateIsValid () (повторное использование свойства IsValid не работает). 2) Затем элементу управления reCaptcha необходимо заполнить свойство ControlToValidate. Вы можете помочь с любым из них? Спасибо.