2011-03-20 63 views
0

我想从asp.net向导添加表单数据到会话数组对象。对象应该存储用户为每个问题选择的问题编号和问题答案。我试图使用多维数组来存储问题编号和相关的答案。我也会开放使用散列表或字典解决方案。c#session多维数组

这是代码我有到目前为止:

string[,] strQandA = new string[10, 2] {{"1", Q1.SelectedValue}, {"2", Q2.SelectedValue}, {"3", Q3.SelectedValue}, {"4", Q4.SelectedValue}, {"5", Q5.SelectedValue}, {"6", Q6.SelectedValue}, {"7", Q7.SelectedValue}, {"8", Q8.SelectedValue}, {"9", Q9.SelectedValue}, {"10", Q10.SelectedValue}}; 
Session["mySession"] = strQandA; 

这是正确的吗?任何帮助,将不胜感激。谢谢

+1

“这是正确的吗?” ==“你试过了吗?它有效吗?” – 2011-03-20 21:57:22

+0

我试过Response.Write(Session [“mySession”]);并返回System.String [,]。 – multiv123 2011-03-20 22:05:27

+1

这是因为当你调用'Write'时,它会在你传递它的对象上调用'ToString()',如果它不是一个字符串的话。如果你在一个没有超载的ref类型上调用'ToString()',它会默认写出Type。您需要将数组索引到数组中以获取值。 – 2011-03-20 22:18:31

回答

1

您的需求的更好的做法是以问题编号为关键字并选择值作为值的字典。类似于:

DropDownList[] arrDDL = new DropDownList[] { Q1, Q2, Q3, Q4, Q5, Q6, Q7, Q8, Q9, Q10 }; 
Dictionary<int, string> strQandA = new Dictionary<int, string>(); 
for (int i = 0; i < arrDDL.Length; i++) 
    strQandA.Add(i + 1, arrDDL[i].SelectedValue); 
Session["mySession"] = strQandA; 

要稍后访问特定值,例如第三个问题的答案:

(Session["mySession"] as Dictionary<int, string>)[3] 
0

您需要在对象上强制转换集合,Response.Write调用ToString()并返回默认实现。

Dictionary<string, YourType> strQandA = new Dictionary<string, YourType>(); 
Session["mySession"] = strQandA; 

Dictionary<string, YourType> mySession = (Dictionary<string, YourType>)Session["mySession"];