2010-07-01 4 views
7

एएसपी.नेट प्रीइनेट घटना में नियंत्रण कैसे प्राप्त करें? पॉइंटर्स शून्य हैं और FindControl विधि शून्य वापस आती है।एएसपी.नेट प्रीइनेट घटना में नियंत्रण कैसे प्राप्त करें?

मैं मास्टर और सामग्री पृष्ठों का उपयोग कर रहा हूं। सामग्री पृष्ठ की मार्कअप इस तरह दिखता है:

<asp:Content ID="Content2" ContentPlaceHolderID="ContentBody" runat="server"> 
    <asp:Table ID="Table1" runat="server" Width="100%"> 
     ..... 
    </asp:Table> 
</asp:Content> 
इस तरह

और कोड:

private void Page_PreInit(object sender, EventArgs e) 
{ 
    Control table = this.FindControl("Table1"); 
    //table is null here 
} 

तो तालिका अभी भी this.FindControl ("Table1") के बाद रिक्त है। पृष्ठ का नामकरण नियंत्रक भी शून्य है। मैं क्या गलत कर रहा हूं?

अद्यतन मुझे नियंत्रण बनाने के लिए इस ईवेंट का उपयोग करना होगा। जैसा कि ASP.NET Page Life Cycle Overview में कहा गया है, इस घटना का उपयोग गतिशील नियंत्रण निर्माण के लिए किया जाना चाहिए। मुझे अपनी तालिका में लिंक की एक सूची बनाने की जरूरत है। ऐसा करने का दूसरा तरीका हो सकता है?

+0

मुझे यकीन नहीं है कि आप क्या गलत कर रहे हैं। क्या आपको प्रीइनिट इवेंट का उपयोग करना है? क्या आप इनिट जैसे बाद की घटना का उपयोग कर सकते हैं? –

+0

मैथ्यू की तरह कहते हैं कि बाद की घटना आपको बेहतर तरीके से अनुकूल कर सकती है। मुझे संदेह है कि यह इस बात में है कि बहुत से नियंत्रण वास्तव में एक साथ रखे जाते हैं, इसलिए यदि आप जीवन चक्र में बहुत जल्दी चीजों तक पहुंचने का प्रयास करते हैं तो यह सब अलग हो जाता है। http://msdn.microsoft.com/en-us/library/ms178472.aspx उपयोगी हो सकता है यदि आप इसे पहले से ही देख चुके हैं। – Chris

+0

अपना संपादन पढ़ने के बाद मैं आमतौर पर पेज_लोड ईवेंट में नियंत्रण पेड़ में सामान जोड़ता हूं। सुनिश्चित नहीं है कि आपने जो अनुभाग उद्धृत किया है वह ईमानदार होने का जिक्र कर रहा है लेकिन मुझे नहीं लगता कि इसका मतलब है कि किसी पृष्ठ पर एक लिंक जोड़ना ... – Chris

उत्तर

4

नियंत्रण प्रारंभ होने से पहले प्रीइनेट को निकाल दिया जाता है। अधिक विस्तृत जानकारी के लिए ASP.NET Page Life Cycle पर पढ़ें।

Init
के बाद सभी नियंत्रण प्रारंभ किया गया है और किसी भी त्वचा सेटिंग्स लागू किया गया है उठाया। व्यक्तिगत नियंत्रण की घटना पृष्ठ की इनिट घटना से पहले होती है।

नियंत्रण गुणों को पढ़ने या प्रारंभ करने के लिए इस ईवेंट का उपयोग करें।

+0

मेरा अपडेट देखें। –

0

PreInit() घटना में, मानक (परिभाषित) नियंत्रण अभी तक कि मंच पर बनाया नहीं किया गया है, इस प्रकार आप किसी भी नियंत्रण के लिए किसी भी संदर्भ नहीं मिल सकता है।

गतिशील नियंत्रण बनाने के लिए पेज_लोड() ईवेंट का उपयोग करें। इस घटना के दौरान, आप मौजूदा नियंत्रण में कोई गतिशील नियंत्रण जोड़ सकते हैं।

पेज_लोड() में गतिशील नियंत्रण बनाने के बाद, कोई भी परिवर्तन/अपडेट करने के लिए प्रीरेंडर() का उपयोग करें।

व्यक्तिगत रूप से, मैं PreInit का उपयोग पेज विस्तृत वस्तुओं (यानी, डेटाबेस कनेक्शन, उपयोगकर्ता सत्र वस्तुओं) और यह भी, जहां मैं सुरक्षा प्रमाणीकरण जांच (और पुनर्निर्देश करता है, तो अधिकृत नहीं) केवल परिभाषित करने के लिए।

1

नियंत्रण प्रारंभ होने से पहले पृष्ठ की प्रीइनेट घटना ट्रिगर की जाती है, इसलिए नियंत्रण अभी तक मौजूद नहीं है। आपको बाद की घटना में नियंत्रण का उपयोग करना होगा, जैसे पेज लोड लोड इवेंट। कृपया http://msdn.microsoft.com/en-us/library/ms178472.aspx देखें।

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