在我的项目中,我有一个变量numtorust,它代表了tourits的数量。 (用于测试目的numtourist = 2)
for (i=0,numtoursut; i++)
我动态创建了5个复选框,为每个游客分配了checkedChanged事件。另外,为了跟踪哪个旅游者适用的复选框,我添加属性'集合'
mycheckbox.InputAttributes.Add("collection", i.ToString());
在checkedchanged事件处理程序中 - 当用户选中一个复选框时,我检查了它的集合属性是否为0或1(第一个或第二个用户)。然后我将myche1
的复选框值添加到List<string)
,如果集合属性= 1。
但是当我决定制作名为List<string>
的{{1}}类型的数组时
当我尝试向其添加元素时,我得到了一个异常 - 对象引用未在我的代码的这一行中将设置为对象的实例
Toursit
这是我的完整代码
Toursist[Int32.Parse(chk.InputAttributes["collection"])].Add(chk.InputAttributes["value"].ToString());
编辑1:
新的
代码protected void checkChanged(object sender,EventArgs e) {
protected void checkChanged(object sender, EventArgs e)
{
CheckBox chk = (CheckBox)sender;
/*that doesn't work
if (chk.Checked)
{
Toursist[Int32.Parse(chk.InputAttributes["collection"])].Add(chk.InputAttributes["value"].ToString());
((List<String>[])Session["chk"])[Int32.Parse(chk.InputAttributes["collection"])] = Toursist[Int32.Parse(chk.InputAttributes["collection"])];
}*/
//this works with myche1 of type list<string>
if ((chk.Checked)&&(chk.InputAttributes["collection"].Equals("1")))
{
myche1.Add(chk.InputAttributes["value"].ToString());
lblProba.Text += chk.InputAttributes["value"].ToString();
Session["chk1"] = myche1;
}
}
当我测试Sessio [“chk”] == 0时,再次出现同样的错误。
但如果我取消注释(所以我不再有这个错误)
List<string>[] Toursist = new List<string>[2];
//Session["chk"] = new List<string>[2];
for (int i = 0; i < Toursist.Length; i++)
{
Toursist[i] = new List<string>();
// ((List<String>[])Session["chk"])[i] = Toursist[i];
}
CheckBox chk = (CheckBox)sender;
if (chk.Checked)
{
if (((List<String>[])Session["chk"])[Int32.Parse(chk.InputAttributes["collection"])] == null)
{
((List<String>[])Session["chk"])[Int32.Parse(chk.InputAttributes["collection"])] = Toursist[Int32.Parse(chk.InputAttributes["collection"])];
}
Toursist[Int32.Parse(chk.InputAttributes["collection"])].Add(chk.InputAttributes["value"].ToString());
lblProba.Text += chk.InputAttributes["collection"].ToString();
((List<String>[])Session["chk"])[Int32.Parse(chk.InputAttributes["collection"])] = Toursist[Int32.Parse(chk.InputAttributes["collection"])];
}
在每个回发事件中,我的会话将为空,我不想要!!
答案 0 :(得分:1)
您尚未创建任何列表。当您创建列表数组时,它不会自动创建数组中的所有列表,您必须手动执行此操作:
List<string>[] Toursist = new List<string>[numtoursut];
for (int i = 0; i < Toursist.Length; i++) {
Toursist[i] = new List<string>();
}