2008-11-01 10 views
7

से एक एएसपी.NET उपयोगकर्ता नियंत्रण को मान्य करना मेरे पास एक बटन के साथ एक asp.net पृष्ठ है। यह बटन पृष्ठ में उपयोगकर्ता नियंत्रण उत्पन्न करता है और सम्मिलित करता है, इसलिए एक पृष्ठ पर कई नियंत्रण मौजूद हो सकते हैं। मुझे यह सत्यापित करने की आवश्यकता है कि उत्पन्न नियंत्रण के अंदर एक निश्चित गतिशील रूप से उत्पन्न नियंत्रण मौजूद है।अपने मूल पृष्ठ

तो .. पेज 0 पर एन नियंत्रण 1 है। प्रत्येक नियंत्रण 1 में एन कंट्रोल 2 के लिए 0 हो सकता है। जब पेज पर सेवबटन पर क्लिक किया जाता है, तो मुझे यह सुनिश्चित करना होगा कि प्रत्येक नियंत्रण 1 के अंदर कम से कम 1 Control2 है।

मैं दो विकल्पों के बीच वर्तमान में कर रहा हूँ:

• गतिशील रूप से प्रत्येक नियंत्रण है कि उत्पन्न होता है, जिनमें से प्रत्येक को मान्य होगा एक Control1 के लिए CustomValidators डालें।

• सत्यापित करें मैन्युअल रूप से (jQuery के साथ), SaveButton.OnClientClick से सत्यापन फ़ंक्शन को कॉल करना।

दोनों अपने तरीके से मैला हैं - यही कारण है कि मैं यह सब आपके साथ साझा कर रहा हूं। क्या मुझे आसान समाधान याद आ रहा है?

अग्रिम धन्यवाद .. (btw - करने के लिए और .NET 3.5 एसपी 1 सहित निष्पक्ष खेल है ऊपर कुछ भी)

+0

चेकआउट: [UserControl को कैसे सत्यापित करें?] (Http://izlooite.blogspot.com/2010/07/how-to-validate-user-control.html) –

उत्तर

8

हम्म मुझे डिजीगुरु द्वारा सुझाए गए इंटरफेस विचार पसंद है लेकिन मैं उप नियंत्रण के बजाय कंटेनर कंट्रोल 1 पर इंटरफ़ेस का उपयोग करता हूं क्योंकि यह कोड के लिए अधिक तार्किक स्थान जैसा लगता है। यहाँ इस पर मेरी ले:

public interface IValidatableControl 
{ 
    bool IsValidControl();  
} 

फिर अपने Control1

public class Control1 : IValidatableControl 
{ 
... Other methods 
    public bool IsValidControl() 
    { 

     foreach(object c in this.Controls) 
     { 
      if(c.GetType() == "Control2") 
       return true; 
     } 
     return false; 
    } 

} 

पर यह लागू शायद बेहतर तरीके इस लिखने के लिए कर रहे हैं, लेकिन यह आरंभ करने के लिए एक विचार के लिए पर्याप्त आप देना चाहिए।

+0

यह एक अच्छा विचार है, और यह बेहतर होता है पृष्ठ का डिजाइन धन्यवाद :) – JoeB

+1

खुशी है कि मैं – digiguru

+2

की सहायता कर सकता हूं आपको एएसपी.Net में IValidator इंटरफ़ेस का उपयोग करना चाहिए, यह IsValid, Validate और ErrorMessage प्रदान करता है।आपके सत्यापनकर्ता को इसे कार्यान्वित करना चाहिए, और आपके इनिट ट्रिगर में आपको पेज को कॉल करने की आवश्यकता है। वैलिडेटर्स। जोड़ें (यह)। – sisve

0

एक विधि को बनाते और एक सरल एक्सएमएल संरचना है कि अपने कस्टम नियंत्रण पदानुक्रम का प्रतिनिधित्व करता है को बनाए रखने की कोशिश कर सकते हैं। किसी भी समय जब आप एक कस्टम उपयोगकर्ता नियंत्रण बनाते हैं या नष्ट करते हैं तो इस संरचना से सम्मिलित करें या हटाएं। सहेजने पर, सत्यापित करें कि xml संरचना में प्रतिनिधित्व नियंत्रण पदानुक्रम सही है। आप एक्सबेल को सत्र ऑब्जेक्ट में पोस्टबैक में बनाए रखने के लिए सहेज सकते हैं।

2

यदि आप फ्लाई पर उपयोगकर्ता नियंत्रण जोड़ रहे हैं, तो आप प्रत्येक नियंत्रण को एक वैध इंटरफ़ेस के साथ एक ही इंटरफेस को कार्यान्वित कर सकते हैं। इस तरह आप पृष्ठ पर प्रत्येक अभिभावक नियंत्रण में प्लेसहोल्डर में नियंत्रण लोड कर सकते हैं। जब पृष्ठ सबमिट किया जाता है, तो प्लेसहोल्डर में नियंत्रण के माध्यम से बस लूप करें, उन्हें इंटरफ़ेस क्लास में डालें और फिर मान्य फ़ंक्शन को कॉल करें। मैं कस्टम सत्यापनकर्ताओं का उपयोग नहीं करता हूं, लेकिन आप वैध फ़ंक्शन से लौटाई गई ऑब्जेक्ट का उपयोग करके सत्यापन त्रुटियों की एक सूची बना सकते हैं, आप जिस तरह से चाहें सत्यापन त्रुटियों के इस संग्रह को प्रस्तुत कर सकते हैं।

1

मुझे लगता है कि आप नियंत्रण 1 में सार्वजनिक संपत्ति असाइन करके इसे कर सकते हैं जो नियंत्रण 2 की आईडी के अस्तित्व का संदर्भ देता है, और उसके बाद नियंत्रण 1 की कक्षा को प्रमाणीकरणप्रॉपर्टी के साथ सजाने के लिए। मैं कुछ सोच रहा हूँ इन पंक्तियों के साथ:

[ValidationProperty("Control2Ref")] 
public partial class Control1 : UserControl 
{ 
    public string Control2Ref 
    { 
     get { return FindControl("Control2"); } 
    } 
    // rest of control 1 class 
} 

और फिर आप Control1 का एक उदाहरण पर एक RequiredFieldValidator बात करने के लिए सक्षम होना चाहिए।

+0

इंडिका नोट्स (खराब) इस में एक संभावित बग ... –

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