2015-06-22 50 views
1

我正在做一個web項目,而且我遇到了一個問題,我想給每個日期的計數器。例如,如果兩個記錄是在6月22日創建的,那麼6月22日的計數器應該是2.如果在6月23日創建了一個記錄,那麼6月23日的計數器應該是1. 我正在考慮使用字典實現這一目標。我定義了一個ASP.NET隱藏字段,然後在後面的代碼中爲它的值分配一個字典。日期是關鍵,計數器值是值。 我到目前爲止的代碼是:提前如何在ASP.NET隱藏字段值中存儲字典?

<asp:HiddenField ID="hdnRefDictionary" runat="server" /> 
hdnRefDictionary.Value = new Dictionary<string,int>(); // Not working since cannot convert Dictionary to string. 

感謝,並有一個美好的一天!

乾杯, 獎號

+0

序列化它到json – MikeSW

+0

您只能將字符串對象存儲在h idden字段值。正如MikeSW所說,序列化它。 – choz

回答

2

您必須手動序列化。您可以使用LINQ來做到這一點:

string data = String.Join(";", dict.Select(i => i.Key + "=" + i.Value.ToString())); 
hdnRefDictionary.Value = data; 

然後編寫代碼來通過對拆分後反序列化「;」並根據「=」構建鍵/值對。

您也可以使用JSON序列化來執行此操作。我使用JSON.NET實用程序,它使序列化對象變得非常簡單。然而,與使用類似查詢字符串的存儲機制來實現您正在嘗試的操作相比,JSON在響應輸出方面略微大一些(沒有多少,但稍微多一點)。

如果您想操縱客戶端和服務器上的數據,您可能想使用隱藏字段;如果你只需要訪問服務器,那麼你會希望像@Imadoddin所說的那樣使用ViewState,或者像Cache,Session等其他一些機制。這是因爲它永遠不會輸出到客戶端(而ViewState的確如此,但是加密),並且不受任何人試圖改變它的影響。

0

默認情況下,隱藏字段不能存儲除字符串以外的任何其他內容。由於Dictionary不是一個字符串,這意味着你必須序列化它。這是硬幣上的一面,因爲在訪問Dictionary對象時,必須重新將其序列化。由於這是一項單調乏味的工作,我建議您使用ViewState,它在內部執行所有序列化和反序列化任務。語法完全相同。

ViewState["yourKey"] = AnyObject; 

如果還想使用隱藏字段,那麼Brian Mains的答案對你來說是完美的。

2

考慮使用Json.Net作爲

Dictionary<string,string> dict=new ......//any dictionary 
string json=Newtonsoft.Json.JsonConvert.SerializeObject(dict); 
hdnRefDictionary.Value = data;//you hidden field 

上後/ desialize簡單的反序列化

Dictionary<string,string> dict=Newtonsoft.Json.JsonConvert.DeserializeObject<Dictionary<string,string>(hdnRefDictionary.Value); 

請注意,如果你把在詞典中,你可能必須替換他們的ToString()方法複雜的對象和/或使用JsonConvertor處理序列化/反序列化自己使用JsonConvertor