मैं एक कस्टम नियंत्रण के व्यूस्टेट में Dictionary<string, string>
स्टोर करने की कोशिश कर रहा हूं, मैं एएसपी.NET 2.0 के लिए विकसित कर रहा हूं:ASP.NET दृश्य स्थिति में <string, string> शब्दकोश संग्रहीत करना?
private Dictionary<String, String> Items
{
get
{
object d = ViewState["Items"];
return (d == null ? null : (Dictionary<String, String>)d);
}
set
{
ViewState["Items"] = value;
}
}
इसे एक्सेस करना इस तरह दिखता है:
public void UpdateData
{
if (this.Items == null)
this.Items = new Dictionary<string, string>();
else
this.Items.Clear();
//Fill the collection
}
जब यह सेट हो जाता है पृष्ठ लोड होने पर पहली बार, यह ठीक काम करता प्रतीत होता है। लेकिन बाद के पोस्टबैक पर, लौटाया गया मूल्य हमेशा शून्य होता है (पहली स्थिति हमेशा होती है)। डिबगिंग से पता चलता है कि यह get
संपत्ति get
में व्यूस्टेट से बाहर हो रहा है।
मैंने कुछ शोध किया है और found है कि कक्षाओं को ViewState में सहेजने योग्य IStateManager
को लागू करना होगा, और Dictionary MSDN page यह इंगित करता है कि Dictionary<TKey, TValue>
नहीं है। लेकिन मैंने बिना किसी समस्या के व्यूस्टेट में शब्दकोशों को संग्रहीत किया है। यहाँ क्या चल रहा है? क्या मेरा पिछला अनुभव एक झटका था?
अद्यतन: मैंने संपत्ति में कुछ टेस्ट कोड जोड़ने का प्रयास किया: set
set
में set
और string test = (string)ViewState["ItemTest"];
में string test = (string)ViewState["ItemTest"];
। Xzx47 की तरह, यह शून्य से बाहर आता है। तो यह Dictionary
serializable होने के साथ एक समस्या प्रतीत नहीं होता है। इसके अलावा, स्पष्टीकरण के लिए, UpdateData
को मेरे RenderControl
ओवरराइड से बुलाया जाता है, जो उस पृष्ठ में Page_Load
के बाद होता है जिसमें नियंत्रण होता है।
आप मूल्यों फ़ॉट कहाँ जाँच कर रहे हैं? मेरा मानना है कि 'इनिट' घटना के बाद व्यूस्टेट लोड हो जाता है। – keyboardP
लौटने से पहले शून्य की जांच में? पहली बार पृष्ठ लोड होने पर, वहां कोई मूल्य नहीं होने वाला है। –
क्या आपके नियंत्रण में आपके नियंत्रण में स्थिर या गतिशील जोड़ा गया है? – ibram