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)
{........}
は、どのように私はPage_Initが起こることを得るのですか?私は何とかリストを追加し、別のPage_Initを処理するために別のポストバックを送信しますか? –
何もする必要はありません。 Page_InitはPage_Loadの前でも実行されます。アイデアは、動的に作成されたコントロールをコントロールツリーにロードすることです。コントロールのリストを実装する前に、まず単一のコントロールで開始してください。あなたは[ここ](http://stackoverflow.com/a/37882531/296861)の例を読むことができます。 – Win