如何在ASP.NET隐藏字段值中存储字典?

时间:2015-06-22 01:29:43

标签: c# asp.net dictionary code-behind

我正在做一个网络项目,我遇到了一个问题,我想为每个日期提供一个计数器。例如,如果在6月22日创建了两条记录,则6月22日的计数器应为2.如果在6月23日创建了一条记录,则6月23日的计数器应为1。 我正在考虑使用字典来实现这一目标。我定义了一个ASP.NET隐藏字段,然后在代码后面为其值分配一个字典。日期是键,计数器值是值。 我到目前为止的代码是:

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

提前致谢,祝你有个美好的一天!

干杯, 江浩

3 个答案:

答案 0 :(得分:2)

您必须手动序列化它。您可以使用LINQ来执行此操作:

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

然后编写代码以便稍后通过拆分&#34;;&#34;来反序列化它。并根据&#34; =&#34;。

构建键/值对

您也可以使用JSON序列化来执行此操作。我使用JSON.NET实用程序,它使序列化对象变得非常容易。但是,JSON比响应输出稍微大一点(不多,但有点),而不是像你想要的那样使用类似查询字符串的存储机制。

如果您想在客户端和服务器上操作数据,您想要使用隐藏字段;如果你只需要在服务器上访问,那么你想要像@Imadoddin所说的那样使用ViewState,或者像Cache,Session等其他一些机制。这是因为它永远不会输出到客户端(以及ViewState,但是是加密的)并且不受任何试图改变它的人的保护。

答案 1 :(得分:2)

考虑使用Json.Net作为

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

on post / desialize simple deserialize

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

请注意,如果您将复杂对象放在字典中,则可能必须使用JsonConvertor覆盖其ToString()方法和/或自己处理序列化/反序列化

答案 2 :(得分:0)

默认情况下,隐藏字段不能存储除字符串以外的任何内容。由于Dictionary不是字符串,这意味着您必须序列化它。这是硬币的一面,因为你必须在访问Dictionary对象时再次反序列化它。由于这是一项繁琐的工作,我建议您使用ViewState来完成内部的所有序列化和反序列化任务。语法完全相同。

ViewState["yourKey"] = AnyObject;

如果你仍然想使用隐藏字段,那么Brian Mains的回答对你来说是完美的。