2011-11-07 8 views
1

私は非常に動的なアプリケーションを扱う大規模な頭痛を受けています。動的プレースホルダの制御とイベントの添付

私はからの動的プレースホルダコントロールを使用しています:動的に再作成ポストバック後にコントロールを作成しようとしたときにこれが私に手間の節約

http://www.denisbauer.com/ASPNETControls/DynamicControlsPlaceholder.aspx

誰かがチェックボックスコントロールにイベントハンドラを接続することに問題がありましたか?

ここに動的に作成されたチェックボックスのコードを示します。

// Now I create my checkbox 
chkDynamic = new CheckBox(); 
string chk = "chk"; 

// Add it to our dynamic control 
chkDynamic.CheckedChanged += new EventHandler(chkDynamic_CheckedChanged); 
chkDynamic.ID = chk; 
DynamicControlsPlaceholder1.Controls.Add(chkDynamic); 
chkDynamic.Text = "hey"; 

これは機能しますが、そのようなイベントは接続されていません! ここに私のイベントハンドラがあります!

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"); 
} 

これで、通常のプレースホルダまたはパネルを使用する場合、これは素晴らしい結果を示します。

Ex。この行の変更:

DynamicControlsPlaceholder1.Controls.Add(chkDynamic); 

Panel1.Controls.Add(chkDynamic); 

へのそしてそれは完璧に動作します。

誰かが私に教えてください、これはこのコントロールの問題なのでしょうか?

DynamicControlsPlaceholderを使用しているときにエラーが発生していないのは、予期せぬイベントだけです。

答えて

0

ダイナミックコントロールを追加する場合は、コントロールを作成/再作成する必要があります。OnInit()。これは、ビューステートとイベントが復元される.NETページライフサイクルのポイントです。ダイナミックプレースホルダコントロールを使用しているダイナミックコントロールを追加する目的のみの場合は、コントロールの作成/レクレーションを単にOnInit()に置くだけで問題は解決します。試してみて、結果を教えてください。

+0

「CheckedChanged」ねえ、応答していただきありがとうございます。私もそのことを考えていましたが、実行時にダイナミックコントロールを追加するオプションを与えました。したがって、これは決定できませんOnInit()私は思っていません:( – clamchoda

+0

あなたの質問を再読した、私は少し良いことを理解していると思う。ページが転記されたら、**既存の**制御構造。その後、ポストバックを引き起こしたイベントが発生すると、ダイナミックコントロールのリストに新しいコントロールを追加し、コントロールリストをリバインドします。 –

0

これは動的に作成された1つのコントロールで動作します。しかし複数ではありません...

1

デリゲートを作成する(匿名メソッド)私の仕事でした。

// Now I create my checkbox 
chkDynamic = new CheckBox(); 
string chk = "chk"; 

// Add it to our dynamic control 
chkDynamic.CheckedChanged += delegate (System.Object o, System.EventArgs e) 
     { 
      if (((CheckBox)sender).Checked) 
      Response.Write("you checked the checkbox :" + this.chkDynamic.ID); 
      else 
      Response.Write("checkbox is not checked"); 
     }; 
chkDynamic.ID = chk; 
DynamicControlsPlaceholder1.Controls.Add(chkDynamic); 
chkDynamic.Text = "hey"; 

これは、動的制御がアクションを打つたびデリゲートで書かれたコードを実行するようになります

関連する問題