Как заставить reCAPTCHA работать с ValidationGroup в ASP.Net (капча)
Вопрос
Я использую плагин 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.
Это сработало для меня...
Добавьте пользовательский валидатор с правильной группой проверки.
Это вызов метода ServerValidate.
recaptcha.Validate();
Затем проверьте следующее перед основной обработкой...
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, вы можете не знать об этом изменении, в результате чего валидатор начнет работать.
См. элементы управления ReCaptchaImage и ReCaptchaValidator, входящие в состав Altairis Web UI Toolkit: http://altairiswebui.codeplex.com/а> р>
Это набор веб-компонентов с открытым исходным кодом, содержащий вполне приличный и соответствующий стандартам ASP.NET (если можно так выразиться, автор :-) реализации ReCaptcha для веб-форм.