私のプロジェクトでは、ツアーの数を表す変数 numtorust を持っています。(テスト目的で numtourist = 2)
for (i=0,numtoursut; i++)
観光客ごとにcheckedChangedイベントが割り当てられた5つのチェックボックスを動的に作成します。また、どの観光客がどのチェックボックスに適用されるかを追跡するために、属性「コレクション」を追加します
mycheckbox.InputAttributes.Add("collection", i.ToString());
checkchanged イベント ハンドラーで - ユーザーがチェックボックスを選択すると、そのコレクション属性が = 0 または 1 (最初のユーザーまたは 2 番目のユーザー) であるかどうかを確認しました。次に、コレクション属性 = 1 の場合myche1
のタイプのチェックボックス値を追加します。List<string)
しかし
、要素を追加しようとしたときに名前付き の型の配列を作成することにしたとき、例外が発生しました-オブジェクト参照がコードのこの行のオブジェクトのインスタンスに設定されていませんList<string>
Toursit
Toursist[Int32.Parse(chk.InputAttributes["collection"])].Add(chk.InputAttributes["value"].ToString());
ここに私の完全なコードがあります
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;
}
}
編集1:
の新しいコード
protected void checkChanged(オブジェクト送信者, EventArgs e) {
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"])];
}
今回も、Sessio["chk"] == 0 かどうかをテストしたときと同じ間違いです。
しかし、コメントを外すと(この間違いはもうありません)
// ((List<String>[])Session["chk"])[i] = Toursist[i];
各ポストバック イベントで、セッションが空になり、したくありません!!