在点击事件 ASP.NET 期间添加可点击的控件

本文关键字:添加 控件 NET 事件 ASP | 更新日期: 2023-09-27 17:56:39

我有一个 ASP.NET Web 表单,其中包含一个列表框,我正在使用按钮动态添加项目(使用会话在回发之间保存列表)。将项添加到列表框时,我想添加一个图像按钮,我可以单击该按钮来更改新创建的按钮的颜色。我知道我应该做一些不同的事情,比如在Page_Init中添加控件,但随后添加按钮事件 ( cmdAdd_Click ) 还没有关闭。我似乎无法弄清楚如何以干净简单的方式做到这一点。

.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)
{........}

在点击事件 ASP.NET 期间添加可点击的控件

您希望

Page_Init中加载控件。否则,它们不在控制树中,并且它们将无法触发cmdChangeColor_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);
        }
    }
}