2008-10-23 14 views
10

में वैलिडेशन ग्रुप के साथ रीकैप्चा कार्य कैसे करें I ASP.Net प्लगइन और reCAPTCHA द्वारा प्रदान किया गया नियंत्रण का उपयोग कर रहा हूं। यदि वेब फॉर्म पर सबमिट बटन सत्यापन समूह में नहीं है तो मैं सफलतापूर्वक नियंत्रण करने के लिए नियंत्रण प्राप्त कर सकता हूं। ReCAPTCHA नियंत्रण के लिए कोई सत्यापन समूह विशेषता नहीं है।एएसपी.Net (कैप्चा)

क्या किसी के पास वेब फॉर्म पर सत्यापन समूह होने पर रीकैप्चा नियंत्रण को काम करने के लिए इस या किसी भी समाधान के साथ कोई सफलता मिली है?

उत्तर

4

रीकैप्चा एएसपी.नेट प्लग-इन एएसपी.NET 1.1 के साथ पिछड़ा-संगत होने के लिए लिखा गया है, जिसका अर्थ है ValidationGroup अवधारणा (जो एएसपी.नेट 2.0 में नया है) समर्थित नहीं है। लेकिन प्लग-इन downloadable source code के साथ आता है, इसलिए आप इसे ValidationGroup का समर्थन करने के लिए स्वयं संशोधित कर सकते हैं।

ASP.NET 2.0, validators should inherit from BaseValidator में और IValidator लागू, जिसका अर्थ है आप BaseValidator बजाय WebControl से इनहेरिट करना RecaptchaControl प्रकार बदलना चाहिए। आपको BaseValidator में परिभाषित सभी विधियों और गुणों को लागू करने के लिए कोड को थोड़ा सा संशोधित करना होगा। फिर आप इसके बजाय अपने पेज पर इस नए नियंत्रण का उपयोग कर सकते हैं, जो अब ValidationGroup का समर्थन करता है।

+0

हाय bzlm। मैंने उपरोक्त किया है, लेकिन दो समस्याएं हैं: 1) बेसविलिएटर को आपको अमूर्त मूल्यांकन Isalid() विधि को लागू करने की आवश्यकता है (इसके साथ IsValid प्रॉपर्टी को पुन: स्थापित करना) काम नहीं करता है। 2) पुनः कैप्चाचा नियंत्रण को फिर नियंत्रण को वैधता संपत्ति की आवश्यकता होती है। क्या आप उनमें से किसी के साथ मदद कर सकते हैं? धन्यवाद। – Nick

+0

मैंने reCAPTCHA प्लगइन द्वारा प्रदान किए गए IValidator कार्यान्वयन पर टिप्पणी की, और उस तर्क को EvaluateIsValid() विधि में धक्का दिया। मैंने कोड में ControlToValidate प्रॉपर्टी को भी छोड़ दिया क्योंकि यह इस परिदृश्य में लागू नहीं होता है। एहसास करने का एक और मुद्दा यह है कि आपको उन स्थितियों को संभालना चाहिए जहां पृष्ठ पर एक से अधिक बार वैध कहा जाता है। आपको यह सुनिश्चित करने की ज़रूरत है कि आप वास्तव में दो बार reCAPTCHA API को कॉल नहीं करते क्योंकि यह नियंत्रण को अमान्य कर देगा। उम्मीद है की यह मदद करेगा। – rifferte

+1

नमस्ते, क्या यह कैसे करना है इस बारे में थोड़ा और जानकारी प्राप्त करना संभव होगा? या क्या किसी को पहले से ही एक पूर्ण परियोजना मिली है जिसे वे साझा कर सकते हैं? – TimS

5

आप कस्टम वैलिडेटर जोड़ सकते हैं, ऑनसेवर वैलिडेट को लागू कर सकते हैं जो ReCAPTCHA डेटा को मान्य करेगा। कस्टम वैलिडेटेटर को किसी भी वैलिडेटर समूह को असाइन किया जा सकता है।

+0

अच्छा समाधान। आपको बस अपने ऑनसेवर वैलिडेट विधि में recaptcha.IsValid की जांच करने की आवश्यकता है। बहुत आसान! – Obfuskater

2

यह मेरे लिए काम किया ...

  1. सही सत्यापन समूह के साथ एक कस्टम सत्यापनकर्ता जोड़ें।

  2. इसकी अपनी ServerValidate विधि कॉल ..

    recaptcha.Validate(); 
    
  3. तब के रूप में अपने मुख्य प्रसंस्करण से पहले इस प्रकार की जाँच ...

    अगर (Page.IsValid & & recaptcha.IsValid) { respose .write ("वैध"); }

एचटीएच।

+1

यह अनिवार्य रूप से इस उत्तर में जैसा नहीं है: http://stackoverflow.com/questions/231344/how-to-make-recaptcha-work-with-a- validationgroup-in-asp-net-captcha/656888 कार्य कोड प्रदान करने के लिए # 656888 – bzlm

0

ReCaptchaImage और ReCaptchaValidator देखें Altairis वेब UI टूलकिट का हिस्सा होने के नियंत्रण: http://altairiswebui.codeplex.com/

यह वेब घटकों के खुला स्रोत सेट, युक्त है काफी सभ्य और ASP.NET मानकों का अनुपालन करने (अगर मैं इसे लेखक जा रहा है का कहना है कि हो सकता है: -) वेब फॉर्म के लिए ReCaptcha के कार्यान्वयन।

7

सोचा मैं बस कुछ काम कर कोड के साथ कुछ अन्य लोगों द्वारा टिप्पणियों पर विस्तार चाहता हूँ ...

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

किसी को भी एक सरल के बारे में सोच सकते हैं ऐसा करने का तरीका? OnServerValidate का उपयोग करने के विचारों के लिए Vidalik के लिए Kudos।

+2

+1। –

1

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

क्लाइंट साइड आवश्यक सत्यापन करने के लिए और reCAPTCHA स्रोत कोड को बदले बिना, मैं अपने फार्म के लिए एक CustomValidator जोड़ा गया है और इनपुट पाठ फ़ील्ड मान्य करने के लिए एक JavaScript फ़ंक्शन बनाया।

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

उत्पन्न इनपुट क्षेत्र मैं पृष्ठ के स्रोत कोड को देखा और पाया है कि इनपुट क्षेत्र हमेशा recaptcha_response_field था की ID पता लगाने के लिए। (अगर मैं गलत हूं तो कृपया मुझे सही करें) इसे जानना, मैं जावास्क्रिप्ट बनाने में सक्षम था (JQuery का उपयोग करके और नियंत्रण की वैधता की जांच करने के लिए एक कस्टम फ़ंक्शन)।

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

नोट: डेवलपर्स ReCAPTCHA के नियंत्रण के उत्पादन में बदलते हैं तो आप परिवर्तन सत्यापनकर्ता काम करने के लिए कब्जा में जिसके परिणामस्वरूप के बारे में पता नहीं हो सकता।

+0

'isFieldValid (" इनपुट [id $ = 'recaptcha_response_field'] "); 'isFieldValid (" # recaptcha_response_field ") भी हो सकता है;'। मेरा मूल संदर्भ मेरे पास एक मानक है ताकि मैं सर्वर नियंत्रणों के लिए आसानी से कस्टमवैलिडेटर्स बना सकूं। – cbillowes

संबंधित मुद्दे