2010-09-14 3 views
5

के बीच सामान्य सूची बनाए रखें यहां बताया गया है में है मेरी कोड-पीछे:Postbacks

List<Event> events = new List<Event>(); 

protected void Page_Load(object sender, EventArgs e) 
{ 

} 

protected void AddEvent_Click(object sender, EventArgs e) 
{ 
    Event ev = new Event(); 

    ev.Name = txtName.Text; 

    events.Add(ev); 
} 

मैं सूची में हर बार जोड़ें बटन क्लिक किया जाता है एक आइटम जोड़ना चाहते हैं, लेकिन सूची हर पोस्टबैक के बाद रीसेट । मैं पोस्टबैक के बीच सूची में डेटा कैसे रख सकता हूं?

उत्तर

8

मैं अक्सर, इस जैसे एक तकनीक का उपयोग करें, हालांकि यह ध्यान रखें कि यह आपके viewstate पैदा कर सकता है (के रूप में ब्राउज़र को प्रदान की गई) के बजाय बड़े विकसित करने के लिए: जब आप सूची का उपयोग करना चाहते तो

public List<Event> Events 
{ 
    get { return (List<Event>)ViewState["EventsList"]; } 
    set { ViewState["EventsList"] = value; } 
} 

कुछ इस तरह करना होगा:

public void AddToList() 
{ 
    List<Event> events = Events; // Get it out of the viewstate 
    ... Add/Remove items here ... 
    Events = events; // Add the updated list back into the viewstate 
} 

भी ध्यान रखें कि आपके इवेंट वर्ग serializable होने की आवश्यकता होगी, लेकिन यह आम तौर पर वर्ग के लिए [serializable] विशेषता (जब तक कि इसकी एक बहुत जटिल वर्ग) जोड़ने के रूप में सरल है।

+1

आपको घटनाओं की संपत्ति पर ईवेंट सूची को वापस असाइन करने की आवश्यकता नहीं है, आप संदर्भों के साथ काम करते हैं। यह वही सूची है। –

+0

@Alex Reibort: वास्तव में आप करते हैं, गेटर में आप दृश्य स्थिति से सूची के उदाहरण को डी-क्रमबद्ध कर रहे हैं, सेटटर में आप उदाहरण को वापस दृश्य स्थिति में क्रमबद्ध कर रहे हैं। कोड में उदाहरण समान है, लेकिन पोस्ट बैक के बीच गायब हो जाता है, इसे बदलने के बाद आपको दृश्य स्थिति को ताज़ा करने की आवश्यकता होती है। – CodingGorilla

+0

नहीं आप नहीं करते हैं। जब आप सूची के लिए पूछने से पहले व्यूस्टेट अपनी सामग्री को deserializes रखता है, तो जब आप इसे एक्सेस करते हैं तो सूची में संदर्भ होता है, तो आप संदर्भ वापस लेते हैं, उदाहरण के लिए इसे अद्यतन करने के लिए उपयोग करते हैं और इसे स्वचालित रूप से व्यूस्टेट में सहेजा जाएगा। बस इसका परीक्षण करें। –

1

आपको किसी भी तरह सूची को बनाए रखने की आवश्यकता होगी। आप इसे व्यूस्टेट में रख सकते हैं, इसे डेटाबेस में दबा सकते हैं, इसे सत्र में स्टोर कर सकते हैं, इसे पृष्ठ पर एक छिपी हुई फ़ील्ड में डाल सकते हैं ...

+0

क्या? एक छुपा फ़ील्ड में वस्तु वस्तु सूची? – JoshYates1980

1

सत्र या दृश्यस्टेट में सूची सहेजें।

protected void AddEvent_Click(object sender, EventArgs e) 
{ 
    Event ev = new Event(); 

    ev.Name = txtName.Text; 
    if(Session["events"] == null) 
    { 
     Session["events"] = new List<Event>(); 
    } 
    var events = (List<Event>)Session["events"]; 
    events.Add(ev); 
} 
0

धन्यवाद कोडिंग गोरिल्ला, इसने मेरी समस्या हल की। लेकिन मुझे नवागंतुकों के लिए एक और चीज़ जोड़नी है।

List<Event> events = Events; // Get it out of the viewstate 
**You should check whether events is null** 
Events = events; // Add the updated list back into the viewstate 
संबंधित मुद्दे