2009-08-24 15 views
8

मेरे पास एक सवाल है कि हम केवल लोडकंट्रोल का उपयोग करके गतिशील नियंत्रण जोड़ सकते हैं। उदाहरण के लिए:लोडकंट्रोल बनाम एएसपी.Net नियंत्रण

public partial class wucReportParam : System.Web.UI.UserControl 
{ 
    protected void Page_Load(object sender, EventArgs e) 
    { 
      wucDate() ctrl = new wucDate(); 
      pnl.Controls.Add(ctrl); 
    } 
} 

जब wucDate की Page_Load विधि में, wucDate के बच्चे नियंत्रण अशक्त है, लेकिन जब मैं निम्न विधि का उपयोग:

public partial class wucReportParam : System.Web.UI.UserControl 
    { 
     public Report Report; 

     protected void Page_Load(object sender, EventArgs e) 
     { 
       ctrl = (wucDate)LoadControl(@"Reports\wucDate.ascx"); 
       pnl.Controls.Add(ctrl); 
     } 
    } 

wucDate, बच्चे की Page_Load विधि में WucDate का नियंत्रण शून्य नहीं है। क्या कोई मुझे बता सकता है कि जब मैं contructor का उपयोग कर रहा हूं तो asp .net wucDate का कोई भी बाल नियंत्रण क्यों नहीं बना रहा ??? धन्यवाद

उत्तर

8

गतिशील रूप से उपयोगकर्ता नियंत्रण लोड करते समय, यह सुनिश्चित करना महत्वपूर्ण है कि मानक ASP.NET पृष्ठ ईवेंट पाइपलाइन शुरू की जाती है और सामान्य रूप से प्रगति होती है। जब आप उपयोगकर्ता नियंत्रण का उदाहरण बनाने के लिए नए ऑपरेटर का उपयोग करते हैं, तो उस उपयोगकर्ता नियंत्रण को एएसपी.NET की ईवेंट सिस्टम में ठीक से जोड़ा नहीं जाता है। यदि घटनाएं (इनिट, लोड, प्रीरेंडर इत्यादि) आग नहीं लगती हैं, तो आपका नियंत्रण ठीक से काम नहीं करेगा। यही कारण है कि लोडकंट्रोल का उपयोग करना आवश्यक है, क्योंकि यह सुनिश्चित करेगा कि आपके उपयोगकर्ता नियंत्रण का उदाहरण ठीक से बनाया गया है और ASP.NET से जुड़ा हुआ है।

0

जैसा कि मुझे याद है, यह बताता है कि कैसे ASP.NET रन टाइम पर पृष्ठ घटकों का निर्माण करता है। एएसपी.नेट में हालांकि आपके पृष्ठों में एक वर्ग है जो आपके कोड-बैक फ़ाइल में परिभाषित है, उनके प्रकार रन टाइम तक वास्तव में मौजूद नहीं हैं। किसी पृष्ठ की तरह, यद्यपि आपके पास एक नियंत्रण परिभाषित किया गया है, जिसे WucDate प्रकार तब तक नहीं बनाया जाता है जब तक इसे रन टाइम में शामिल नहीं किया जाता है। इस कारण से, पृष्ठ को जीवन चक्र के माध्यम से प्रकार को शुरू करने और ठीक से चलाने के लिए नियंत्रण को लोडकंट्रोल से लोड किया जाना चाहिए।

यह मेरी याददाश्त का सबसे अच्छा है इसलिए यदि मैं यहां गलत हूं तो कृपया मुझे बताएं।

4

जाहिर है, टाइपऑनटोल (या गेटटाइप) के साथ लोडकंट्रोल का उपयोग करना एक ही समस्या है जैसे कि 'नया' जहां बाल नियंत्रण प्रारंभ नहीं होते हैं। ASCX फ़ाइल कार्यों के लिए स्ट्रिंग के साथ LoadControl का उपयोग करना।

बाल नियंत्रण आरंभ नहीं करता है।

LoadControl(typeof(MyReport), null); 

काम करता है!

LoadControl("Report.ascx"); 
+0

इस बारे में एक स्पष्टीकरण है कि आप इसे दस्तावेज़/कनेक्ट साइट पर क्यों देख रहे हैं: http://msdn.microsoft.com/en-us/library/ewtd66a0.aspx (सामुदायिक सामग्री तक स्क्रॉल करें) या https://connect.microsoft.com/VisualStudio/feedback/ViewFeedback.aspx?FeedbackID=103456 –

2

उपयोगकर्ता नियंत्रण के अंदर नियंत्रण का प्रारंभ एएससीएक्स फ़ाइल द्वारा संचालित होता है। केवल "नया कुछ नियंत्रण" का उपयोग करने से इस प्रारंभिकरण को चलाने का मौका नहीं मिलेगा, और यहां तक ​​कि अगर ऐसा होता है, तो एसीएक्स फ़ाइल में सभी डिज़ाइन (मार्कअप) खो जाएंगे।

याद रखें कि कक्षा "WucDate" केवल मूल श्रेणी है जिसे पूर्ण उपयोगकर्ता नियंत्रण से प्राप्त होता है। यह वही वर्ग नहीं है जैसा आप लोडकंट्रोल ("wucDate.ascx") का उपयोग करते समय प्राप्त करेंगे।

और ईमानदार होने के लिए, पृष्ठ जीवन चक्र के साथ लोड करने के लिए लोडकंट्रोल में कुछ भी नहीं है। जब आप कंटेनर नियंत्रण संग्रह में नियंत्रण जोड़ते हैं तो उस भाग को संभाला जाता है।

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