Como fazer o Recaptcha funcionar com um grupo de validação no ASP.NET (CAPTCHA)
Pergunta
Estou usando o plug -in ASP.NET e o controle fornecido por Recaptcha. Posso fazer com que o controle funcione com sucesso se o botão Enviar no formulário da Web não estiver em um grupo de validação. Não há atributo ValidationGroup para o controle Recaptcha.
Alguém teve algum sucesso com esta ou qualquer soluções para fazer com que o controle Recaptcha funcione quando houver um grupo de validação no formulário da Web?
Solução
O plug-in Recaptcha ASP.NET é escrito para ser compatível com o ASP.NET 1.1, o que significa o ValidationGroup
O conceito (que é novo no ASP.NET 2.0) não é suportado. Mas o plug-in vem com Código fonte para download, para que você possa modificá -lo para apoiar ValidationGroup
.
Em Asp.net 2.0, Os validadores devem herdar de BaseValidator
e implementar IValidator
, o que significa que você deve alterar o tipo de recaptchacontrol para herdar BaseValidator
ao invés de WebControl
. Você terá que modificar um pouco o código para implementar todos os métodos e propriedades definidos em BaseValidator
. Em seguida, você pode usar este novo controle em sua página, que agora suporta ValidationGroup
.
Outras dicas
Pensei em expandir os comentários de alguns outros com algum código de trabalho ...
<recaptcha:RecaptchaControl ID="RecaptchaControl" runat="server" />
<asp:CustomValidator ID="RecaptchaValidator" runat="server" OnServerValidate="RecaptchaValidator_ServerValidate" ErrorMessage="Recaptcha input invalid." ValidationGroup="SomeValidationGroup" />
E codificar atrás ...
protected void RecaptchaValidator_ServerValidate(object sender, ServerValidateEventArgs e)
{
this.RecaptchaControl.Validate();
e.IsValid = this.RecaptchaControl.IsValid;
}
Alguém pode pensar em uma maneira mais simples de fazer isso? Parabéns a Vidalik pelos pensamentos sobre o uso do OnserverValidate.
Você pode adicionar o CustomValidator, implementar o OnServerValidate que validaria os dados Recaptcha. O CustomValidator pode ser atribuído a qualquer grupo validador.
Isso funcionou para mim ...
Adicione um validador personalizado com o grupo de validação correto.
É o seu servidorValidate Method Chamada ..
recaptcha.Validate();
Em seguida, verifique o seguinte antes do seu processamento principal ...
if (Page.isValid && recaptcha.isvalid) {respose.write ("válido"); }
Hth.
RemotecukA sugestão funcionou para mim sem adicionar validador personalizado.
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
}
}
Para fazer a validação necessária do lado do cliente e, sem alterar o código-fonte do Recaptcha, adicionei um CustomValidator ao meu formulário e criei uma função JavaScript para validar o campo de texto de entrada.
<asp:CustomValidator ID="reqRecaptcha" runat="server" ClientValidationFunction="validateRecaptcha" Text="Required"></asp:CustomValidator>
Para descobrir o ID
Do campo de entrada gerado, olhei para o código -fonte da página e notei que o campo de entrada era semprerecaptcha_response_field
. (Por favor, corrija -me se estiver errado) Sabendo disso, pude criar o JavaScript (usando o jQuery e uma função personalizada para verificar a validade de um controle).
function validateRecaptcha(sender, args) {
args.IsValid = isFieldValid("input[id$='recaptcha_response_field']");
}
NOTA: Se os desenvolvedores alterarem a saída do controle de recaptcha, você pode não estar ciente da alteração, resultando na aprovação do validador para funcionar.
Consulte os controles RecaptChaimage e RecaptChavalidator fazendo parte do Altairis Web UI Toolkit: http://altairiswebui.codeplex.com/
É um conjunto de componentes da Web de código aberto, contendo padrões bastante decentes e compatíveis com os padrões do ASP.NET (se posso dizer que é o autor :-) Implementação do Recaptcha para formulários da Web.