私は実行時に動的に作成されたコントロールである非常に動的なWebアプリケーションを持っています。複数の動的に作成されたイベントをハンドラで処理! (IDの問題)
ここに私の問題を解決するために私のコードの最初の必要な部分があります。
これは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で複数のコントロール」に遭遇し
:string chk = "chk" + id.ToString();
へ:私が変更された場合、これは完全に正常に動作するということですこれは一意のIDで動作します! ODD情報のもう1つのビットが役に立つかもしれません。ループから取り除いて、別の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);
:(遠くなるような心である[「ID」] nullでも壊れていないです。常に値0とアップ!
感謝を保持します。。見ている人の男/ギャルのために、私は本当にこの上こだわっ
PSを - !。。私はハードコードIDの
エラーは何ですか?それとも、レンダリングしていないのですか? – simonlchilds
@csharpsi申し訳ありません。彼らは誤りではありません。私がIDをハードコードしない限り、イベントは起動しません。 – clamchoda
理由はおそらく、それぞれのポストバックが異なるIDを割り当てているからです。コントロールは同じIDを各ポストバックに再割り当てする必要があります。 –