在点击事件 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)
{........}
您希望
在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);
}
}
}