2016-07-11 19 views
1

私はボタンを使ってアイテムを動的に追加するリストボックスを持つASP.NET Webフォームを持っています(セッションを使ってポストバック間のリストを保存します)。アイテムがリストボックスに追加されると、クリックして新しく作成したボタンの色を変更できるImageButtonを追加します。 Page_Initでコントロールを追加するなどして、何か違うやり方をしているはずですが、Add Buttonイベント(cmdAdd_Click)はまだ消えていません。きれいでシンプルなやり方でそれをやり遂げる方法を考え出すことはできません。クリックイベント中にクリック可能なコントロールを追加するASP.NET

.aspxのは、スニペット:スニペットの後ろ

<asp:Button ID="cmdAdd" runat="server" OnClick="cmdAdd_Click" /> 
<asp:ListBox ID="lboObjects" runat="server"></asp:ListBox> 
<asp:Panel ID="pnlButtons" runat="server"></asp:Panel> 

は.csコード:

protected void cmdAdd_Click(object sender, ImageClickEventArgs e) 
{ 
    // Simplified for Brevity 
    ((List<Line>)Session["lstObjects"]).Add("Unique Object"); // the object will be unique. 
    lboObjects.DataSource = ((List<Line>)Session["lstObjects"]); 
    lboObjects.DataBind(); 

    // Clear out b/c I intend on having a cmdRemove_Click, but not showing for simplicity 
    pnlButtons.Controls.Clear(); 

    foreach (object obj in ((List<Line>)Session["lstObjects"])) 
    { 
     ImageButton imageButton = new ImageButton(); 

     imageButton.ID = obj.ToString(); 
     imageButton.Click += cmdChangeColor_Click; 
     pnlButtons.Controls.Add(imageButton); 
    } 
} 

protected void cmdChangeColor_Click(object sender, ImageClickEventArgs e) 
{........} 

答えて

0

をあなたはPage_Init内のコントロールをロードします。そうでなければ、コントロールツリーにはなく、cmdChangeColor_Clickイベントをトリガーできません。例えば

私はcmdAdd_Clickイベントを実行した後、提供された例で

protected void Page_Init(object sender, EventArgs e) 
{ 
    var list = Session["lstObjects"] as List<Line>; 
    if (list != null) 
    { 
     foreach (var obj in list) 
     { 
      ImageButton imageButton = new ImageButton {ID = obj.ToString()}; 
      imageButton.Click += cmdChangeColor_Click; 
      pnlButtons.Controls.Add(imageButton); 
     } 
    } 
} 
+0

は、どのように私はPage_Initが起こることを得るのですか?私は何とかリストを追加し、別のPage_Initを処理するために別のポストバックを送信しますか? –

+0

何もする必要はありません。 Page_InitはPage_Loadの前でも実行されます。アイデアは、動的に作成されたコントロールをコントロールツリーにロードすることです。コントロールのリストを実装する前に、まず単一のコントロールで開始してください。あなたは[ここ](http://stackoverflow.com/a/37882531/296861)の例を読むことができます。 – Win

関連する問題