Domanda

Sto utilizzando il plug-in ASP.Net e il controllo forniti da reCAPTCHA . Posso far funzionare correttamente il controllo se il pulsante di invio sul modulo Web non si trova in un gruppo di validazione. Non esiste alcun attributo validationgroup per il controllo reCAPTCHA.

Qualcuno ha avuto successo con questo o qualsiasi soluzione per far funzionare il controllo reCAPTCHA quando c'è un gruppo di validazione sul modulo web?

È stato utile?

Soluzione

Il plug-in ASP.NET reCAPTCHA è scritto per essere retrocompatibile con ASP.NET 1.1, il che significa che il concetto ValidationGroup (che è nuovo in ASP.NET 2.0) non è supportato. Ma il plug-in viene fornito con codice sorgente scaricabile , quindi puoi modificarlo tu stesso per supportare ValidationGroup .

In ASP.NET 2.0, validatori dovrebbe ereditare da BaseValidator e implementare IValidator , il che significa che dovresti cambiare il tipo di RecaptchaControl per ereditare da BaseValidator anziché WebControl . Dovrai quindi modificare un po 'il codice per implementare tutti i metodi e le proprietà definiti in BaseValidator . Quindi puoi usare questo nuovo controllo sulla tua pagina, che ora supporta ValidationGroup .

Altri suggerimenti

Ho pensato di espandere i commenti di alcuni altri con un codice funzionante ...

<recaptcha:RecaptchaControl ID="RecaptchaControl" runat="server" />

<asp:CustomValidator ID="RecaptchaValidator" runat="server" OnServerValidate="RecaptchaValidator_ServerValidate" ErrorMessage="Recaptcha input invalid." ValidationGroup="SomeValidationGroup" />

E codice dietro ...

protected void RecaptchaValidator_ServerValidate(object sender, ServerValidateEventArgs e)
{
    this.RecaptchaControl.Validate();
    e.IsValid = this.RecaptchaControl.IsValid;
}

Qualcuno può pensare a un modo più semplice di farlo? Complimenti a Vidalik per i pensieri sull'utilizzo di OnServerValidate.

È possibile aggiungere CustomValidator, implementare OnServerValidate per convalidare i dati ReCAPTCHA. CustomValidator può essere assegnato a qualsiasi ValidatorGroup.

Questo ha funzionato per me ...

  1. Aggiungi un validatore personalizzato con il gruppo di validazione corretto.

  2. È la sua chiamata al metodo ServerValidate ..

    recaptcha.Validate();
    
  3. Quindi controlla come segue prima dell'elaborazione principale ...

    if (Page.IsValid & amp; & amp; recaptcha.IsValid) { respose.write (" valido "); }

HTH.

Il suggerimento di RemotecUk ha funzionato per me senza aggiungere un validatore personalizzato.

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

Per eseguire la convalida richiesta sul lato client e senza alterare il codice sorgente di reCaptcha, ho aggiunto un CustomValidator al mio modulo e creato una funzione JavaScript per convalidare il campo di testo di input.

<asp:CustomValidator ID="reqRecaptcha" runat="server" ClientValidationFunction="validateRecaptcha" Text="Required"></asp:CustomValidator>

Per scoprire l ' ID del campo di input generato ho guardato il codice sorgente della pagina e ho notato che il campo di input era sempre recaptcha_response_field . (Per favore, correggimi se sbaglio) Sapendo questo, sono stato in grado di creare JavaScript (usando JQuery e una funzione personalizzata per verificare la validità di un controllo).

    function validateRecaptcha(sender, args) {
        args.IsValid = isFieldValid("input[id$='recaptcha_response_field']");
    }

NOTA: se gli sviluppatori cambiano l'output del controllo reCaptcha, potresti non essere a conoscenza della modifica che ha comportato il blocco del validatore.

Vedi i controlli ReCaptchaImage e ReCaptchaValidator che fanno parte del toolkit dell'interfaccia utente Web di Altairis: http://altairiswebui.codeplex.com/

È un set open source di componenti Web, contenente abbastanza decenti e conformi agli standard ASP.NET (se posso dire che è l'autore :-) implementazione di ReCaptcha per i Web Form.

Autorizzato sotto: CC-BY-SA insieme a attribuzione
Non affiliato a StackOverflow
scroll top