2009-08-28 20 views
2

動的に追加されたコントロールのイベントは発生しません。これは、ページの子コントロールの作成イベントで呼び出される関数で発生します。動的に追加されたコントロールのイベントは発生しません。

Button bb = new Button(); 
bb.Click += new EventHandler(bb_Click); 
PlaceHolderQuestions.Controls.Add(bb); 
+0

別のページでうまくいった奇妙なことですが、コピーして別のページで使用したときに機能しないことがありました。 –

答えて

1

asp.netページはlifecyleです。イベントのディスパッチはコントロールツリーに基づいて行われます。あなたのダイナミックコントロールは、コントロールツリー内にある必要があります。 OnInitまたはOnloadのページまたはコントロールを含むプレースホルダにコントロールを追加すると、イベントが送出されます。

+0

別のページでうまくいった奇妙なことですが、コピーして別のページで使用したときに動作しませんでした! –

+0

Hmm。あなたのページのプロパティAutoEventWireUp = "True | False"をチェックしてください。多分それは別のセットです。 – Christian13467

0

以前のイベントに配置する必要があります。 initイベントハンドラにコードを入れてみてください。

+0

別のページではうまくいきましたが、コピーして別のページで使用したときにうまくいきませんでした。 –

+0

initに入れましたが、それでもまだ火災がありませんでした –

0

このボタンもにそれぞれ Page_Loadに動的に作成されていることを確認してください。 Page_Loadは、ボタンクリックのため前にハンドラを起動するので、あなたがポストバック時にボタンを作成するために失敗した場合、ボタンは「が存在しない、しかし

If Not Page.IsPostback() 
    ... 
End if 

:私は、多くの場合、内部のようなコードを入れてのミスを犯しますそのイベントが起こる頃には。

+0

Page_Initに入れて、この条件があったがまだ動作していない –

+0

いいえ、特にこのIf条件の_outside_を入れたいと思います。 –

0

コードを以前のイベントに入れても問題は解決されません。 Page_Load()にコードを入れようとしても、問題は解決しません。

ページのライフサイクルに応じて、OnLoad関数をオーバーライドし、動的に作成されたコントロールを同じIDで再作成して再接続します。

protected override void OnLoad(EventArgs e) 
{ 
    Button bb = new Button() { ID = "myBtn" } 
    bb.Click += new EventHandler(bb_Click); 
    PlaceHolderQuestions.Controls.Add(bb); 

    base.OnLoad(e); 
} 

protected void Page_Load(object sender, EventArgs e) 
{ 
} 
関連する問題