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?

Foi útil?

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 ...

  1. Adicione um validador personalizado com o grupo de validação correto.

  2. É o seu servidorValidate Method Chamada ..

    recaptcha.Validate();
    
  3. 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.

Licenciado em: CC-BY-SA com atribuição
Não afiliado a StackOverflow
scroll top