2012-03-03 18 views
8

मैंने गतिशील नियंत्रण और व्यूस्टेट से संबंधित कुछ शोध किए हैं।पेज_लोड में जोड़े जाने पर भी एएसपी.NET गतिशील नियंत्रण व्यूस्टेट को क्यों रख सकता है?

और मैंने पढ़ा है कि एक गतिशील नियंत्रण के लिए व्यूस्टेट को रखने के लिए आपको इसे पृष्ठ_इनिट ईवेंट में जोड़ना होगा। यह समझ में आता है क्योंकि PageLifeCycle है:

  1. प्रारंभ।
  2. LoadViewState।
  3. लोडपोस्टबैकडेटा।
  4. लोड।
  5. RaisePostbackEvent।
  6. SaveViewState।
  7. प्रस्तुत करें।

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

MSDN में इसके अलावा मैंने पाया:

नोट आप Page_Load ईवेंट हैंडलर में अपने नियंत्रण लोड हो रहा है और देखने राज्य ठीक से बनाए रखने के साथ भाग प्राप्त करने में सक्षम हो सकता है। यह सभी इस बात पर निर्भर करता है कि आप गतिशील रूप से लोड किए गए नियंत्रण प्रोग्रामेटिक रूप से लोड किए गए हैं या नहीं, और यदि ऐसा है, तो जब आप नियंत्रण के सापेक्ष इसे कर रहे हैं। जोड़ें (गतिशील नियंत्रण) लाइन। इस पर पूरी तरह से चर्चा इस आलेख के दायरे से थोड़ी दूर है, लेकिन कारण यह काम कर सकता है क्योंकि नियंत्रण गुण की जोड़ें() विधि माता-पिता के दृश्य स्थिति को अपने बच्चों में दोबारा लोड करती है, यहां तक ​​कि हालांकि लोड व्यू स्टेटस मंच पारित हो गया है।

लेकिन मैं वास्तव में इसे पूरी तरह से समझ नहीं पा रहा हूं इसलिए मुझे उम्मीद है कि कोई इसे समझा सकता है। पहले ही, आपका बहुत धन्यवाद।

उत्तर

4

इस कोड को कार्य करते हुए प्रदर्शन करेंगे: आप नियंत्रण को संशोधित करता है, तो उसके बाद यह प्रपत्र इसे अपनी viewstate रहता है में जोड़ा जाता है

protected void Page_Load(object sender, EventArgs e) 
{ 
    Button b1 = new Button(); 
    Button b2 = new Button(); 
    if (!IsPostBack) 
    { 
     b1.Text = "Button1"; 
    } 
    this.form1.Controls.Add(b1); 
    this.form1.Controls.Add(b2); 
    if (!IsPostBack) 
    { 
     b2.Text = "Button2"; 
    } 
} 
तो

, लेकिन अगर आप इसे संशोधित आप फ़ॉर्म में से पहले टेक्स्ट इसे व्यूस्टेट में नहीं बनाता है। यह क्या होता है - बिल्कुल क्यों ऐसा लगता है कि यह एक और प्रश्न है (यह वास्तव में विपरीत है कि मैंने दस्तावेज़ों को पढ़ने के बारे में सोचा होगा)। अनिवार्य रूप से इस तथ्य यह है कि पेज के जीवन चक्र के माध्यम से नियंत्रण नाटकों जब यह Controls.Add के माध्यम से नियंत्रण पेड़ में जोड़ा जाता है पेज के साथ "पकड़ने" के लिए (की वजह से है -

संपादित
मैं उल्लेख करना भूल गया) - इस पर अंतहीन लेख हैं क्योंकि इसके बारे में बहुत कुछ नहीं है जो सीधा है।

1

अतीत में (एएसपी.नेट 2.0 या 3.5, सुनिश्चित नहीं है), जब आप इसका उल्लेख कर रहे हैं, तो इसे लागू करने का प्रयास करते समय, मुझे पेज_इनिट में नियंत्रण जोड़ना पड़ा।उन्हें पेज_लोड में जोड़ना मुझे नहीं लगता कि क्लाइंट साइड में किए गए परिवर्तन सर्वर की तरफ आते हैं, जो सही समझ में आता है क्योंकि जब फ्रेमवर्क दृश्यों को व्यूस्टेट को बांधने की कोशिश कर रहा था, तो वे अभी तक नहीं बनाए गए थे।

मुझे यह जानकर आश्चर्य हुआ कि यह बदल गया है। शायद एएसपी.NET 4.0 में कुछ पेश किया गया है?

0

नेट 4.5 में केवल CreateChildControls() विधि को ओवरराइड करें और गतिशील नियंत्रण भवन के अंदर रखें।