2012-06-07 13 views
6

मुझे पता है कि इस सवाल से कई बार पूछा गया है लेकिन मुझे संदेह है कि मेरे पास एक अद्वितीय परिदृश्य है।पोस्टबैक के बाद संपत्ति शून्य - गतिशील रूप से लोड नियंत्रण

मैं एक बाल नियंत्रण (एएससीएक्स) लोड कर रहा हूं और उस नियंत्रण पर एक संपत्ति स्थापित कर रहा हूं। यह पोस्टबैक तक पूरी तरह से ठीक काम करता है जहां संपत्ति शून्य है।

इसके साथ प्रथम श्रेणी जो ChildControl लोड करता है:

public partial class MyUserControl : UserControl 
{ 
    public MyType MyProperty { get; set; } 
    protected void Page_Load(object sender, EventArgs e) 
    { 
     //Exception on next line because Property is null (only on postback) 
     var somevalue = MyProperty.SubProperty; 
+0

कहां से 'CreateChildControls' कहलाता है? क्या यह हमेशा 'IsPostBack' के बावजूद बनाया गया है? –

+0

इसे हमेशा कहा जाता है। यह एक शेयरपॉइंट समाधान है। CreateChildControls() ईवेंट/विधि उस क्लास के भीतर है जो Microsoft.SharePoint.WebPartPages.WebPart से प्राप्त होती है। मुझे संदेह है कि अगर मुद्दा शेयरपॉइंट से संबंधित है। सलाह के लिए – Fox

उत्तर

12

ठीक है:

protected override void CreateChildControls() 
{ 
    MyUserControl control = (MyUserControl)Page.LoadControl(_ascxPath); 
    control.MyProperty = base.MyProperty 
    Controls.Add(control); 
} 

फिर, मेरे बाल नियंत्रण पर मैं निम्नलिखित कोड मिल गया है। मुझे इसे समझाने की कोशिश करें।
1. एक बार पेज बनाया है, तो आप पूरे पृष्ठ lifecycle
2. आप उपयोगकर्ता नियंत्रण बनाने के लिए कुछ नियंत्रण पर क्लिक करें मिलता है, और आप इसे
3. अब आप इस पर नियंत्रण करने के लिए मूल्य में प्रवेश कर रहे हैं, और पोस्टबैक
हो रही 4. सर्वर साइड पोस्टबैक पर संभाला जाता है, लेकिन जैसा कि आप देख सकते हैं कि पेजस्ट लोड होने पर व्यूस्टेट क्रियाएं दिखाई देती हैं।
व्यूस्टेट के मुख्य उद्देश्यों में से एक नियंत्रण घटनाओं को संभालने में है, यह देखने के लिए कि क्या वे बदल गए हैं या अपने राज्यों या कुछ और बचा सकते हैं।
5. यदि इस समय, जब व्यूस्टेट लोड हो जाता है तो आप अभी भी नियंत्रण नहीं बनाते हैं, तो इसके सभी घटनाओं और मूल्यों को अनदेखा कर दिया जाएगा।

समाधान या तो इसे स्थिर नियंत्रण बनाते हैं और इसे छिपाते हैं, या तो व्यूस्टेट क्रियाओं से पहले इसे बनाते हैं।

+0

टीएक्स। कोड बदलने के तुरंत बाद प्रतिक्रिया देंगे। – Fox

+0

धन्यवाद। आपकी सलाह काम किया। मैंने ऑन-इन इवेंट में संपत्ति प्रारंभिक कोड को स्थानांतरित कर दिया और अब सबकुछ ठीक काम करता है। – Fox

+0

आपका स्वागत है, मैंने खुद को सामना करते समय इस मुद्दे पर काफी समय बिताया है। –

5

आपको पेज_इनिट ईवेंट में नियंत्रण जोड़ने और गुण सेट करने की आवश्यकता है, अन्यथा आप गुण मान खो देंगे।

+0

टीएक्स, उस पर काम करने में व्यस्त। परिणाम – Fox

+0

धन्यवाद इमरान के साथ जल्द ही वापस आ जाएगा। आपकी सलाह भी मदद की। दुर्भाग्य से मैं दो उत्तरों को सही के रूप में चिह्नित नहीं कर सकता, लेकिन आपको +1 कर सकता हूं। टीएक्स – Fox

+2

कोई चिंता नहीं प्रिय, खुशी है कि आपको जवाब मिला है, इससे कोई फर्क नहीं पड़ता कि किसने दिया। चीयर्स –

2

एएसपी.NET पृष्ठ life cycle के बारे में माइक्रोसॉफ्ट स्पष्टीकरण में, यह लिखा गया है कि प्रीइनेट में गतिशील रूप से बनाए गए नियंत्रण बनाए जाने चाहिए।

यह मेरे लिए काम किया। यहाँ मेरी मुख्य पृष्ठ है: (।।।)

protected global::System.Web.UI.HtmlControls.HtmlGenericControl FiltersZone; 

protected override void OnPreInit(EventArgs e) 
    { 
     base.OnPreInit(e); 
     FiltersZone.Controls.Add(new PlanningFiltersSurgeonWeb()); 
    } 

यह डायनामिक रूप से तैयार ".ascx" नियंत्रण एक छिपी हुई फ़ील्ड शामिल हैं:

<input id="hidTxtPaint" type="hidden" name="hidTxtPaint" runat="server" /> 

मैं अब कर रहा हूँ "submit" या "__dopostback('hidTxtPaint')" के बाद गतिशील रूप से बनाए गए एएससीएक्स नियंत्रण Page_Load ईवेंट के भीतर से अपना मूल्य पुनर्प्राप्त करने के लिए avaScript।

दूसरी ओर, छिपे हुए फ़ील्ड का मान हमेशा पोस्ट के बाद खाली होता है यदि उसके माता-पिता ".ascx" नियंत्रण मुख्य पृष्ठ के Page_Load ईवेंट में जोड़ा जाता है।

+0

एक व्यापक स्पष्टीकरण जो स्वीकार किए गए उत्तर से अधिक सही और सहायक है - धन्यवाद! – zanlok

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

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