2011-02-07 40 views
8

मेरे पास एक वेब पेज है जहां उपयोगकर्ताओं को ग्राहक संपर्क जानकारी दर्ज करने की आवश्यकता है। वे 0 से अनंत संपर्कों में प्रवेश कर सकते हैं।गतिशील रूप से नियंत्रण की सूची में नियंत्रण जोड़ना

public void btnAddContact_Click(object sender, EventArgs e) 
    { 
     IList<CustomerContactProfile> customerContacts = new List<CustomerContactProfile>(); 
     if (ViewState["CustomerContactList"] != null) 
      customerContacts = (List<CustomerContactProfile>)ViewState["CustomerContactList"]; 
     CustomerContactProfile contactProfile = (CustomerContactProfile)LoadControl("~/Controls/Embedded/CustomerContactProfile.ascx"); 
     customerContacts.Add(contactProfile); 

     foreach (CustomerContactProfile contact in customerContacts) 
      phCustomerContacts.Controls.Add(contact); 

     ViewState["CustomerContactList"] = customerContacts; 
    } 

इस कोड काम नहीं करता क्योंकि ViewState के सभी भंडारण को संभाल नहीं कर सकते हैं: पीछे मैं इस जोड़ा मेरी कोड में

<ajaxToolkit:ToolkitScriptManager runat="Server" EnablePartialRendering="true" ID="ScriptManager1" /> 
<asp:PlaceHolder ID="phCustomerContacts" runat="server" EnableViewState="true">/asp:PlaceHolder> 
<asp:LinkButton ID="btnAddContact" runat="server" OnClick="btnAddContact_Click" CssClass="LinkButton" Text="Add Contact"/> 

:

मैं पृष्ठ पर यह पृष्ठ कोड बनाया वह नियंत्रण डेटा। हालांकि, मैं पहले से जोड़े गए नियंत्रणों को संग्रहीत करने के लिए एक और तरीका नहीं सोच सकता।

asp:PlaceHolder नियंत्रण का व्यूस्टेट कुछ भी नहीं बचाता है और मुझे नियंत्रणों को सहेजने की आवश्यकता है ताकि यदि कोई उपयोगकर्ता पहले डेटा पर कुछ डेटा डालता है कि डेटा खोने पर डेटा खो नहीं जाता है और शीघ्र।

+1

व्यूस्टेट में किसी भी विशेष कारण को होना चाहिए? आप इसके बजाय सत्र का प्रयास कर सकते हैं। – asawyer

+0

सत्र ठीक होगा लेकिन यदि उपयोगकर्ता पृष्ठ छोड़ देता है तो क्या यह सत्र को भर नहीं पाएगा? –

+1

सत्र पृष्ठ-आधारित राज्य के लिए बिल्कुल जगह नहीं है। एक के लिए, इसका मतलब यह है कि, जब तक आप अतिरिक्त उपाय नहीं करते हैं, तब तक उपयोगकर्ता इन दो पृष्ठों को दो अलग-अलग विंडो में नहीं देख सकता - जो कि अधिकांश वेब ऐप्स में संभव होना चाहिए। –

उत्तर

1

पूरे नियंत्रण को स्टोर करने के बजाय, बस सत्र में अंतर्निहित डेटा संग्रहीत करें, और प्रत्येक बार जब आप पृष्ठ को पुनः लोड करते हैं तो उस डेटा से नियंत्रण सेट को पुनर्निर्माण करें।

+0

नियंत्रण में डेटा को आप कैसे बदलते हैं? उदाहरण के लिए, नियंत्रण में टेक्स्टबॉक्स होता है - यदि टेक्स्टबॉक्स मान बदल जाता है और पृष्ठ पुनः लोड हो जाता है, तो परिवर्तित मूल्य सत्र से अंतर्निहित डेटा के साथ प्रतिस्थापित किया जाएगा। – PTuckley

0

मुझे यकीन नहीं है कि संपर्कों को गतिशील रूप से जोड़ने का यह सबसे अच्छा तरीका है। Jquery के माध्यम से नियंत्रण बनाने के लिए बेहतर नहीं होगा, और वेब विधि के लिए सृजन के लिए डेटा भेजना बेहतर होगा?

+0

का उपयोग कर डेटाबेस में रखा जाएगा jquery शायद बेहतर है। मैंने अभी इसका इस्तेमाल नहीं किया है। –

0

इसके बजाय व्यूस्टेट में नियंत्रण की संख्या को स्टोर करना बेहतर होगा ... और फिर उन्हें पेज इनिट या प्रीइनिट में जोड़ें ... व्यूस्टेट को प्रत्येक गतिशील नियंत्रण के लिए बनाए रखा जाएगा। निश्चित रूप से बटन क्लिक के बाद यह पोस्टबैक के लिए होगा।

एचटीएच।

+0

@ ब्रेन - यह काम करेगा, सिवाय इसके कि मैं फॉर्म में सारी जानकारी खो दूंगा। –

+0

कोई व्यूस्टेट जानकारी को तब तक नहीं रखता है जब तक कि आप इनिट या प्रीिनिट में नियंत्रण वापस जोड़ते हैं। –

0

उपयोगकर्ता द्वारा दृश्य स्थिति में दर्ज किए गए नियंत्रणों की संख्या संग्रहीत करें। LoadViewState पृष्ठ विधि को ओवरराइड करें और वहां नियंत्रणों की संख्या वापस जोड़ें। ढांचा आपके द्वारा नियंत्रण में पोस्ट किए गए डेटा को पुनः लोड करने का ख्याल रखेगा। आप जानकारी खो देंगे नहीं। व्यूस्टेट को बहाल करने से पहले आपको यह सुनिश्चित करना होगा कि आप नियंत्रण जोड़ लें।

0

इसे व्यूस्टेट के बजाय सत्र में स्टोर करें। यह उतना ही बुरा है लेकिन यह काम करेगा!

0

मुझे लगता है कि आपको इसके लिए किसी भी अस्थायी भंडारण पर निर्भर नहीं होना चाहिए - व्यूस्टेट, सत्र, या अन्यथा।

आप अपने .ascx का उपयोग कर रहे हैं जैसे कि मैं आमतौर पर कक्षा का उपयोग करता हूं ... उपयोगकर्ता नियंत्रण बड़ा होने वाला है, हालांकि, मुझे कल्पना है, क्योंकि इसमें बहुत सारे HTML हैं (?)।

वैसे भी, कक्षा की एक सामान्य सूची कम से कम होगी ... कम से कम।

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

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