2011-11-07 7 views
0

私は実行時に動的に作成されたコントロールである非常に動的な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の

+0

エラーは何ですか?それとも、レンダリングしていないのですか? – simonlchilds

+0

@csharpsi申し訳ありません。彼らは誤りではありません。私がIDをハードコードしない限り、イベントは起動しません。 – clamchoda

+1

理由はおそらく、それぞれのポストバックが異なるIDを割り当てているからです。コントロールは同じIDを各ポストバックに再割り当てする必要があります。 –

答えて

0

sesssion( "ID")をリセットするのを忘れるかもしれないので、ページがポストバックするときに、新しいIDでチェックボックスが再作成されます。チェックボックスはすべてのポストバックで再作成されるので、毎回同じIDを持つ必要があり、そうでなければ新しいコントロールとして認識され、そのためイベントハンドラは呼び出されません。

+0

返事ありがとうございます。しかし、彼らは間違いなくリセットされています。最初のラウンドでは、セッションID = 0をデバッグしました。また、実行時に複数の一意のIDを示すaspxエラーが発生し、ページがレンダリングされませんでしたが、 – clamchoda

+2

いいえ、あなたは私を誤解していました。前のページのライフサイクル。私の意見では、セッション["ID"]を削除し、単純にローカル変数を0に設定して使用することができます。 – nogola

+0

ああ。 ? !Page.IsPostBackで定義されていない限り、ローカル変数はポストバックが発生するたびにリセットされますが、残りのアプリケーションにはvariabのスコープがありませんle :( – clamchoda

0

あなたはAutoPostBackを設定しようとしたしていない限り、申し訳ありませんが、エラーがないイベントは、単に発生しません。あなたのチェックボックスのプロパティはtrue

+0

chkDynamoc.AutoPoastBack = trueを追加しましたが、これで問題は解決しませんでした:( – clamchoda

関連する問題