वेबफॉर्म के साथ काम करने के बावजूद मैं अभी भी समय-समय पर घटना जीवन चक्र के बारे में भ्रमित हो रहा हूं। यह ऐसी समस्या नहीं है जिसे हल करने की आवश्यकता है, क्योंकि यह समझने की उम्मीद है कि चीजें किस तरह से काम करती हैं।उप-नियंत्रक अपने कंटेनर से पहले क्यों प्रारंभ करते हैं?
मान लीजिए आप एक रूप है:
Default.aspx:
<form>
<MyControls:UserControl1 runat="server">
</form>
UserControl1: ascx:
<MyControls:UserControl2 runat="server">
OnInit
घटनाओं इस क्रम में होते हैं:
UserControl2_OnInit
UserControl1_OnInit
Default_OnInit
क्या यह सिर्फ बास-अक्वार्ड नहीं है? इनिट कोड को क्रम में चलाने के क्रम में नहीं चलाना चाहिए? क्या माता-पिता नियंत्रण अपने ऑनइनिट रन से पहले किसी बच्चे के गुणों को प्रारंभ करने में सक्षम नहीं होना चाहिए? यही है, जबकि आप मार्कअप में सबकंट्स के गुणों को प्रारंभ कर सकते हैं, लेकिन माता-पिता नियंत्रण को गतिशील रूप से बाल नियंत्रण के गुण सेट करने में सक्षम होने का कोई सीधा तरीका नहीं है जो इसके ऑनइनिट ईवेंट में उपलब्ध होगा।
क्या मैं कर रहा समाप्त हो गया गया है इस तरह की चीज़ है:
override void UserControl2_OnInit()
{
NamingContainer.OnInit += new EvenHandler(UserControl1_ActualInit);
}
protected void UserControl2_ActualInit(..) {
// do actual init code here, which will occur before OnLoad but after it's parent
// OnInit
}
तो यह एक दुर्गम समस्या नहीं है। मुझे समझ में नहीं आता कि यह पहली जगह क्यों है।
मुझे एहसास है कि शायद आप अपने ऑनइनिट कोड में अपने सभी बाल नियंत्रण आरंभ करने में सक्षम होना चाहेंगे। तो ठीक है, आपको आधार पर कॉल करने में सक्षम होना चाहिए। पहले इंटिनेट, इसके बाद, अपना खुद का प्रारंभिक कोड, जिसके कारण सभी बच्चे को ऑनइनिट प्रोग्राम्स को चलाने के लिए नियंत्रण करना चाहिए। लेकिन घटना जीवन चक्र कि जिस तरह से काम नहीं करता। Init घटनाओं रिकर्सिवली श्रृंखलित कर रहे हैं नहीं, वे स्वतंत्र रूप से माता-पिता की घटनाओं को चलाने के लिए लगता है, और अंतरतम एक हमेशा पहले चलाने हो जाता है। लेकिन ऐसा लगता है कि यदि जीवन किसी भी स्थिति में आपकी बात करने से पहले आप बेस इवेंट (या नहीं) को कॉल कर सकते हैं तो जीवन बहुत आसान होगा। क्या कोई ऐसी चीज है जो मुझे याद आ रही है जो इस प्रत्याशित स्थिति को वांछनीय या यहां तक कि आवश्यक बनाता है?
मैं आपके साथ सहमत हूं क्योंकि आधार कक्षाएं उनके बच्चों के सामने शुरू होती हैं। –
मेरे पास आपके प्रश्न का उत्तर नहीं है, लेकिन मैं आपको बता सकता हूं कि दिशानिर्देश यह है कि आपको जीवन चक्र में इस चरण में माता-पिता या बच्चे के कंटेनरों पर भरोसा नहीं करना चाहिए। http://msdn.microsoft.com/en-us/library/system.web.ui.control.init.aspx –
यह मुझे लगता है कि वेबफॉर्म आर्किटेक्चर में एक मौलिक डिज़ाइन दोष है। इसलिए आपको माता-पिता और बाल नियंत्रणों के बीच संबंध स्थापित नहीं करना चाहिए (मुझे लगता है) 'ऑनलोड'। हालांकि, 'ऑनलोड' से पहले चीजों को करना अक्सर महत्वपूर्ण होता है, जैसे गतिशील रूप से बनाए गए नियंत्रणों को पुनर्निर्मित करना (जो ओएनआईआईटी में क्या करना है: http://support.microsoft.com/kb/317794 तो अगर आपको जानकारी चाहिए डाटाबेस से यह पता लगाने के लिए कि कौन से नियंत्रण बनाए गए हैं? तो क्या होगा यदि आपका डेटा स्रोत माता-पिता द्वारा निर्धारित किया जाता है? –