2011-07-01 15 views
2

動的に作成され、自分のページに挿入されるWebコントロールに問題があります。私は、作成された検索のデータに応じて、いくつかのLinkBut​​tonを作成し、各ボタンにEvent Handlerを追加しようとしています。結果をフィルタリングします。動的に作成されたコントロールのイベントが起動しない

コントロールは正しく初期化されますが、イベントは発生しません。

Private Sub Page_Init(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles MyBase.Init 
    Controls.Clear() 

    Dim btn As Controls.LocalizableLinkButton 
    For Each element As Generic.KeyValuePair(Of String, ResultFilterData) In m_list 

    btn = New LocalizableLinkButton 
    btn.ID = m_Name & "$lnk" & count 
    btn.Label = element.Value.Label.Append(" (" + CStr(element.Value.Count) + ")") 
    btn.CommandArgument = element.Value.Key 
    AddHandler btn.Click, AddressOf Me.btn_Click 

    Controls.Add(btn) 
    Next 
End Sub 

このコードはPage_Initにあるので、すべてのコントロールはポストバックで再作成する必要があります。 (LocalizableLinkBut​​tonは、テキストに多言語機能を追加するためのLinkBut​​tonの拡張です)。

問題は、メソッドbtn_Clickが呼び出されないことです。リンクボタンは、前と同じIDを持つコールバックで適切に初期化されます。しかし、イベントは発生しません。

私はASP.Net 2.0

任意のアイデアを使用していますか?

+0

ページまたはUserControlの[ClientIDMode](http://www.dotnetperls.com/keyvaluepair)を「静的」に設定すると機能しますか? –

+0

私はASP.Net 2.0を使用していると言いましたが、ClientIDModeは4.0でしか導入されていないので、役に立たないでしょう。 – Chnoch

答えて

2

最後に、ASP.NETにリンクボタンが付いていたという問題がわかりました。

エラーは、それぞれのLinkBut​​tonのIDに '$'記号を使用していました。ポストバックJavaScriptを作成するとき、ASP.NETは明らかに$記号を使用してコントロール階層を構築します。したがって、LinkBut​​tonは存在しないコントロール内にネストされていると考えられます。そして、イベントはもちろん発射されません。

$記号を削除すると正常に機能しました。

0

おそらく、このコードをPage_Loadに入れて見たいでしょう。このPage_Initのコントロールにはアクセスしないことが一般的に推奨されています。この段階でコントロールが作成されたという保証はないためです。

私はVBの男ですが、私はこれをdefault.aspxのcodebehindに入れて、うまくいきます。

protected void Page_Load(object sender, EventArgs e) 
     { 
      Button button = new Button(); 
      button.Click += new EventHandler(button_Click); 
      button.Text = "test"; 
      Form.Controls.Add(button); 
     } 

     void button_Click(object sender, EventArgs e) 
     { 
      throw new NotImplementedException(); 
     } 
+0

これは何も変わりません。ところで、私は、Page_Initメソッドの動的コントロールを初期化することが最善であることをよく読んでいるので、ポストバックに利用できるようになります。それが私がそこに置く理由です。 Page_Loadにそれらを保持する方が良いでしょうか? – Chnoch

+0

例を使って答えを更新しましたが、見てみたいかもしれません。ああ、私はPage_Initの内部で同じことをして、うまく動作します。だから私はあなたのforeachロジックにエラーがあると思われる。 – Illuminati

+0

ありがとうございます。私は火曜日に仕事に着くときに私は一見を詳しく見ていきます。あなたが投稿した例がうまくいっていて、全く違う何もしていないので、コントロールの階層内の何かが間違っていると思われます... – Chnoch

関連する問題