Как заставить reCAPTCHA работать с ValidationGroup в ASP.Net(captcha)
Я использую плагин ASP.Net и управление, предоставляемые reCAPTCHA. Я могу успешно заставить управление работать, если кнопка отправки в веб-форме не находится в группе validation. Для элемента reCAPTCHA нет атрибута validationgroup.
Кто-нибудь имел успех с этим или любыми решениями, чтобы заставить элемент управления reCAPTCHA работать, когда в веб-форме есть группа validation?
Ответы
Ответ 1
Плагин reCAPTCHA ASP.NET написан для обратной совместимости с ASP.NET 1.1, что означает, что концепция ValidationGroup
(которая является новой в ASP.NET 2.0) не поддерживается. Но плагин поставляется с загружаемым исходным кодом, поэтому вы можете изменить его самостоятельно, чтобы поддерживать ValidationGroup
.
В ASP.NET 2.0 валидаторы должны наследовать от BaseValidator
и реализовать IValidator
, что означает, что вы должны изменить тип RecaptchaControl наследовать от BaseValidator
вместо WebControl
. Затем вам придется немного изменить код, чтобы реализовать все методы и свойства, определенные в BaseValidator
. Затем вы можете использовать этот новый элемент управления на своей странице, который теперь поддерживает ValidationGroup
.
Ответ 2
Думал, что я просто расширю комментарии некоторых других с некоторым рабочим кодом...
<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.
Ответ 3
Вы можете добавить CustomValidator, реализовать OnServerValidate, который будет проверять данные ReCAPTCHA. CustomValidator может быть назначен любой группе ValidatorGroup.
Ответ 4
Это сработало для меня...
-
Добавить пользовательский валидатор с правильной группой проверки.
-
Его вызов метода ServerValidate..
recaptcha.Validate();
-
Затем перед вашей основной обработкой проверьте следующее:
if (Page.IsValid & recaptcha.IsValid)
{
respose.write( "действительный" );
}
НТН.
Ответ 5
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
}
}
Ответ 6
Чтобы выполнить требуемую проверку на стороне клиента и не изменяя исходный код 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, вы можете не знать об изменениях, приводящих к срабатыванию проверки валидатора.
Ответ 7
См. элементы управления ReCaptchaImage и ReCaptchaValidator, входящие в набор инструментов Altairis Web UI Toolkit: http://altairiswebui.codeplex.com/
Это набор веб-компонентов с открытым исходным кодом, содержащий вполне приличные и совместимые с ASP.NET стандарты (если можно сказать, что это автор:-) реализация ReCaptcha для веб-форм.