2012-04-16 13 views
8

आग नहीं करता है मैंने अपने फॉर्म पर CustomValidator लगाया है। मैंने अपनी ControlToValidate संपत्ति सेट नहीं की है। इसके ServerValidate घटना में मैं निम्नलिखित लिखा है:कस्टम वैलिडेटर सर्वर वैलिडेट विधि

protected void CustomValidator1_ServerValidate(object source,  
               ServerValidateEventArgs args) 
{ 
    args.IsValid = false; 
} 

मैं इस विधि के लिए एक ब्रेकपाइंट डाल लेकिन यह कभी कि बिंदु पर आ रहा है। लेकिन अगर मैं इसे किसी अन्य रूप में करता हूं तो यह एक आकर्षण की तरह काम करता है।

  1. दोनों बटन और CustomValidator की ValidationGroup संपत्ति एक ही
  2. मैं दोनों बटन और CustomValidator में इस संपत्ति को हटाने की कोशिश की, अभी भी काम नहीं करता है।

ऐसा लगता है कि कुछ ऐसा रूप है। मैंने फ़ॉर्म पर CustomValidator डाला है और इसकी ServerValidate इवेंट विधि सेट करने के अलावा अन्य किसी भी गुण को स्पर्श नहीं किया है।

संपादित करें: Page.Validate के माध्यम से बटन क्लिक करें हैंडलर में मान्यता के लिए मजबूर करने

<asp:CustomValidator ID="CustomValidator2" runat="server" 
     ErrorMessage="This is a test" 
    onservervalidate="CustomValidator1_ServerValidate" 
    ValidationGroup="PA"></asp:CustomValidator> 


<asp:Button ID="btnPensionersOK" runat="server" Text="OK" Width="75px" 
      onclick="Button1_Click" ValidationGroup="PA" /> 

उत्तर

19

प्रयास करें:

protected void Button1_Click(Object sender, EventArgs e) 
{ 
    Page.Validate(); 
    if(Page.IsValid) 
    { 
     // servervalidate should have been called 
    } 
} 

संपादित (टिप्पणियों से):

यहाँ aspx हिस्सा है

यदि आप कस्टम नियंत्रक को सत्यापित करना चाहते हैं कि आपके नियंत्रण में कुछ भी दर्ज नहीं किया गया/चुना गया है, तो आपकोसेट करना होगासच करने के लिए। आप CustomValidator को RequiredFieldValidators को प्रतिस्थापित भी करना चाहेंगे।

मुझे लगता है कि एएसपीएक्स पर वैधकर्ता-आदेश यह तय करता है कि क्या पिछले वैलिडेटर ने Page.IsValid=false बना दिया है या नहीं। या ASP.NET इतना स्मार्ट है कि यह SeverValidate को एक साधारण टेक्स्ट-रिक्त चेक से महंगा होने लगता है।

+0

लेकिन अन्य वैधकर्ता कैसे काम करते हैं? मेरे पास एक ही रूप में कई आवश्यक फ़ील्ड वैलिडेटर हैं लेकिन वे सामान्य रूप से काम करते हैं। और फिर, मैं एक ही रूप में वही काम करता हूं, और कोई समस्या नहीं है, यह मान्य है। चीजें ServerValidate विधि आग नहीं है। –

+1

@ माइकजेएम: मुझे नहीं पता। क्या आप पोस्टबैक पर पेज_लोड में डेटाबेसिंग कर रहे हैं? क्या आप कहीं और कॉल कर रहे हैं 'पृष्ठ। वैध() '? क्या आपको कोई जावास्क्रिप्ट त्रुटियां मिलती हैं? क्या आवश्यक फ़ील्ड वैलिडेटर्स पोस्टबैक को रोकते हैं? क्या यह बिल्कुल वापस पोस्ट कर रहा है? –

+0

हां, मैं पेज_लोड में डेटाबेसिंग कर रहा हूं लेकिन पोस्टबैक पर नहीं। मैंने कभी भी पेज.विलिडेट() को कहीं और नहीं बुलाया। मुझे कोई जावास्क्रिप्ट त्रुटियां नहीं मिलती हैं। आवश्यक फ़ील्ड वैलिडेटर्स पोस्टबैक को रोकते हैं। यह वापस पोस्ट कर रहा है। –

0

मैं उन लोगों के लिए कुछ और मदद भी करना चाहूंगा जो कस्टम वैलिडेटर्स और आवश्यक फ़ील्ड वैलिडेटर्स का उपयोग उसी समय करेंगे। किसी को ध्यान में रखना चाहिए कि क्लाइंट साइड सत्यापन पहले होता है। और सर्वर साइड सत्यापन केवल पोस्टबैक के बाद ही होगा। मुझे यकीन है कि आपको यह मिल गया है, लेकिन अगर यह स्पष्ट नहीं है: इसका मतलब है कि पहले क्लाइंट साइड वर्किंग वैधकर्ताओं के लिए बाध्य होने वाले सभी नियंत्रण पोस्टबैक होने के लिए मान्य होना चाहिए। पेज के बाद। IsValid ट्रू सर्वर साइड स्टफ होता है और किसी भी बदलाव को पोस्ट करता है जिसमें सर्वर साइड सत्यापन संदेश शामिल होते हैं।

तो यहाँ तरीके एक ही समय .:

  1. सत्यापनकर्ता के दोनों समूहों सेट क्लाइंट साइड पर काम करने पर काम करने के लिए एक दोनों CustomVCalidators और अन्य प्रमाणकों में बनाया बना सकते हैं। इस मामले में हमें यह सुनिश्चित करना होगा कि कस्टम वैल्यूटर के लिए हम स्क्रिप्ट को स्पाइसिस कर दें जो क्लाइंट साइड पर सत्यापन करेगी। स्क्रिप्ट लिखने के बिना और केवल सर्वर वैलिडेट विधि भरना प्रमाणीकरण सर्वर में होगा। भले ही सक्षम क्लाइंटस्क्रिप्ट गुण सत्य पर सेट हो।

  2. सर्वर पक्ष पर काम करने के लिए सत्यापनकर्ताओं के दोनों समूह सेट करें। ऐसा करने के लिए बस सक्षम क्लाइंटस्क्रिप्ट को गलत पर सेट करें। लेकिन ध्यान दें कि यह सर्वर लोड करेगा।

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