दिलचस्प पोस्ट
सी # में जावा की एन्यूएम के बराबर क्या है? कैसे Accessstoken का उपयोग कर ग्राफ एपीआई के माध्यम से संदेश फेसबुक मित्र को भेजें JCIFS स्ट्रीमिंग फाइलों के साथ एंड्रॉइड सर्वरसेटिंग प्रोग्रामिंग कॉलम में एक सीएसएस वर्ग जोड़ना मैं अप्रचलित / पदावनत के रूप में एक विधि को कैसे चिह्नित करूं? सबसेट राशि का त्वरित समाधान कैसे पृष्ठभूमिवर्कर के साथ जीयूआई अपडेट करें? System.out :: println के बराबर लैम्ब्डा अभिव्यक्ति क्या है jquery: अनलोड या पहले लोड हो रहा है? Qt निर्माता – परियोजना त्रुटि: Xcode ठीक से सेट नहीं है आपको / usr / bin / xcodebuild चालू कर लाइसेंस अनुबंध की पुष्टि करने की आवश्यकता हो सकती है लिनक्स कर्नेल मॉड्यूल के init_module कोड से एक डिवाइस नोड कैसे बनाऊँ? टाइप करने के लिए जी ++ अपरिभाषित संदर्भ जब संदर्भ (एल मूल्य और आर-मान) पास-बाय-वैल्यू को पसंद किया जाता है तो पास से ओवरलोड हो रहा है? जब पहली कॉलम स्ट्रिंग है और शेष कॉलम संख्या हैं, तो numpy.genfromtxt का उपयोग कैसे करें? सीएसएस 3 का उपयोग करके एसवीजी ड्रॉप साइड

एएसपी.नेट गतिशील रूप से बनाए गए नियंत्रण और पोस्टबैक

मुझे पता है कि इस प्रश्न को हजारों बार पूछा गया है, और मैंने इससे पहले संघर्ष किया है, लेकिन किसी कारण से, मैं जो पूरा करना चाहता हूं वह पूरा नहीं कर सकता … मेरे पास एक गतिशील रूप से जोड़ा गया लिंकबटन है, जब क्लिक किया जाएगा गतिशील रूप से जोड़ देगा एक ही पैनल में एक नियंत्रण (इस उदाहरण में, एक टेक्स्ट बॉक्स) इसका मतलब है कि लिंकबटन को क्लिक करने के समय के रूप में कई नियंत्रणों को लगातार जोड़ना है (यानी मैं इसे एक बार क्लिक करता हूं, एक बॉक्स, फिर दूसरा क्लिक मुझे 2 बक्से देगा, एक और क्लिक एक तीसरा जोड़ देगा)। नीचे दिए गए कोड में, मैं प्रत्येक टेक्स्ट बॉक्स नियंत्रण के लिए एक अद्वितीय आईडी बनाने के लिए चालू दिनांक और समय का उपयोग करता हूं।

जब मैं कोड निष्पादित करता हूं, "फ़िल्टर जोड़ें" पर क्लिक करना एक नया टेक्स्टबॉक्स उत्पन्न करेगा, लेकिन एक बार फिर क्लिक करने से एक नया निर्माण होगा, और इसके पहले किसी एक को निपटाना होगा। इसके बजाय, मैं पिछले पाठ बॉक्स के साथ ही इसके भीतर जमा किसी भी डाटा को जारी रखना चाहता हूं।

आपकी मदद की सराहना की है।

एएसपीएक्स में:

<asp:Panel ID="pnlFilter" runat="server"> </asp:Panel> 

Aspx.cs में:

 protected void Page_Init(object sender, EventArgs e) { LinkButton lb = new LinkButton(); lb.ID = "lbAddFilter"; pnlFilter.Controls.Add(lb); lb.Text = "Add Filter"; lb.Click += new EventHandler(lbAddFilter_Click); } void lbAddFilter_Click(object sender, EventArgs e) { TextBox tb = new TextBox(); tb.ID = "tb" + DateTime.Now.ToBinary().ToString(); pnlFilter.Controls.Add(tb); } 

Solutions Collecting From Web of "एएसपी.नेट गतिशील रूप से बनाए गए नियंत्रण और पोस्टबैक"

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

यही मैंने किया है और उसने जीवन को बहुत आसान बना दिया है आशा है कि यह किसी को मदद करता है

 void lbAddFilter_Click(object sender, EventArgs e) { TextBox tb = new TextBox(); tb.ID = "tb" + DateTime.Now.ToBinary().ToString(); pnlFilter.Controls.Add(tb); } 

यह काम करने वाला नहीं है – यह एक जीवन चक्र समस्या है जैसा कि आपने अपने प्रश्न में अनुमान लगाया है। आप इस के साथ बहुत से तरीके काम कर सकते हैं, लेकिन होनस वेग्नेर के सुझाव सबसे लचीले हैं

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

अभी आपके पेज इवेंट लाइफस्टाइल में क्या हो रहा है:

  1. पृष्ठ कॉल ऑनइनट और आपके लिंकबटन को जोड़ता है
  2. उपयोगकर्ता लिंकबटन को क्लिक करता है
  3. पेज कॉल अनुरोध को शुरू करने के लिए OnInit कॉल करता है लिंकबटन निर्मित है
  4. ईवेंट हैंडलर को कहा जाता है, जो गतिशील रूप से आपके टेक्स्ट बॉक्स बनाता है और इसे नियंत्रण संग्रह में जोड़ता है
  5. उपयोगकर्ता लिंकबटन को फिर से क्लिक करता है
  6. पेज फिर से LinkButton जोड़ने के लिए OnInit कॉल PnlFilter.Controls संग्रह इस बिंदु पर खाली है, सिवाय किसी भी तत्वों को आपने अपने मार्कअप में स्थिर रूप से घोषित कर दिया है
  7. ईवेंट हैंडलर को कहा जाता है और नियंत्रण सूची में एक नया टेक्स्ट बॉक्स जोड़ा जाता है।

मुझे यकीन नहीं है कि यह सबसे अच्छा अभ्यास है, लेकिन मुझे इसके समान मॉडल के साथ सफलता मिली है (ध्यान दें कि मैंने इस कोड का परीक्षण नहीं किया है – इसे समायोजन की आवश्यकता हो सकती है):

 protected override void OnInit(EventArgs e) { base.OnInit(e); LinkButton lb = new LinkButton(); lb.ID = "lbAddFilter"; pnlFilter.Controls.Add(lb); lb.Text = "Add Filter"; lb.Click += new EventHandler(lbAddFilter_Click); // regenerate dynamically created controls foreach ( var control in PersistedControls ) { pnlFilter.Controls.Add(GenerateControl(control)); } } private IList<Control> _persistedControls; private const string PersistedControlsSessionKey = "thispage_persistedcontrols"; private IList<Control> PersistedControls { if (_persistedControls == null) { if (Session[PersistedControlsSessionKey] == null) Session[PersistedControlsSessionKey] = new List<Control>(); _persistedControls = Session[PersistedControlsSessionKey] as IList<Control>; } return _persistedControls; } void lbAddFilter_Click(object sender, EventArgs e) { TextBox tb = new TextBox(); tb.ID = "tb" + DateTime.Now.ToBinary().ToString(); PersistedControls.Add(tb); pnlFilter.Controls.Add(tb); } 

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

मुझे विश्वास है कि आपको प्रत्येक पोस्टबैक पर प्रत्येक नियंत्रण को फिर से बनाना होगा।

मुझे पता है कि रिपीयर नियंत्रण अपने बच्चों के बारे में पर्याप्त जानकारी रखता है, जब उन्हें डाटाबेस में बनाया जाए … आप इसे थोड़े से काम को बचाने के लिए इस्तेमाल कर सकते हैं।

जोड़ने का प्रयास करें,

 if(!Page.IsPostback) --- your code that adds different controls.