実行時にコントロールを動的に作成する非常に動的な Web アプリがあります。
これは、私の問題を解決するためにコードの最初に必要な部分です。
これは for ループ内にあり、基本的に ID とイベント ハンドラーを使用して複数のチェックボックスを作成します。
// All I am doing here is incrementing our session counter so we can increment our ID
int id = Convert.ToInt32(Session["id"]);
id++;
Session["id"] = id;
// Now I create my checkbox
chkDynamic = new CheckBox();
chkDynamic.Text = "hey";
string chk = "chk" + id.ToString();
chkDynamic.ID = chk;
chkDynamic.CheckedChanged += new EventHandler(chkDynamic_CheckedChanged);
Panel1.Controls.Add(chkDynamic);
この次のセクションは、カスタム イベント ハンドラーです。
protected void chkDynamic_CheckedChanged(object sender, EventArgs e)
{
if (((CheckBox)sender).Checked)
Response.Write("you checked the checkbox :" + this.chkDynamic.ID);
else
Response.Write("checkbox is not checked");
}
ODD として私を襲うもの。私が変更すれば、これは完全にうまくいくということですか:
string chk = "chk" + id.ToString();
に:
string chk = "chk";
しかし、もちろん、「同じ ID を持つ複数のコントロール」に遭遇します。
私の問題は、これを一意の ID で動作させることです! 役立つかもしれない別のODD情報。ループから取り出して、別の ID のチェックボックスを手動で追加すると、同様に機能します。これは気が遠くなるようなものです:(
chkDynamic = new CheckBox();
chkDynamic.Text = "hey";
// string chk = "chk" + id.ToString();
chkDynamic.ID = "hey1";
chkDynamic.CheckedChanged += new EventHandler(chkDynamic_CheckedChanged);
Panel1.Controls.Add(chkDynamic);
chkDynamic = new CheckBox();
chkDynamic.Text = "hey";
// string chk = "chk" + id.ToString();
chkDynamic.ID = "hey2";
chkDynamic.CheckedChanged += new EventHandler(chkDynamic_CheckedChanged);
Panel1.Controls.Add(chkDynamic);
プログラムもデバッグしましたが、Session["id"] に格納されている値は null でも壊れていません。常に値 0 以上を保持します。
男/ギャルを見てくれてありがとう。私は本当にこれに立ち往生しています!
PS - 申し訳ありません。エラーはありません。ID をハードコーディングしない限り、イベントは発生しません。