如何获取ajax面板回发中动态图像按钮的句柄

时间:2009-05-14 22:46:52

标签: asp.net ajax postback imagebutton

当用户选择列表中的项目时,我将图像按钮写入新行中的表格单元格中:

ImageButton imgbtnRemove = new ImageButton();
imgbtnRemove.ID = "uxStandardLetterDeleteImage_" + items.letterName;
imgbtnRemove.CommandName = "uxStandardLetterDeleteImage_" + items.letterName;
imgbtnRemove.ImageUrl = items.remove;
imgStatus.AlternateText = "Remove";
tRow.Cells[3].Controls.Add(imgbtnRemove);

单击新图像按钮时,我似乎无法掌握它。我在Page_PreRender事件中看到它,我也在每个回发中重新加载表。

string returnData = Request.Form.ToString();

但迭代通过表单控制图像:

if (c is System.Web.UI.WebControls.Button ||
c is System.Web.UI.WebControls.ImageButton)

找不到它。如果我手动输入:

,我可以找到它
imgbtnRemove.Click += new System.Web.UI.ImageClickEventHandler(this.ButtonClick);
在Page_Load中

然后在点击事件中抓取它:

switch (((System.Web.UI.WebControls.ImageButton)sender).CommandName)
...

但是因为添加和删除了新行,所以这会以编程方式变得相当丑陋。我认为必须有一个优雅的解决方案来动态地从服务器端代码创建和检索动态图像按钮。我已经做了很多挖掘,但是这个让我很难过。

提前致谢...

1 个答案:

答案 0 :(得分:2)

如果您正在页面生命周期的事件处理阶段(例如,在项目选定事件中)创建动态控件,那么控件将在下一次回发时消失。

为了向ViewState注册动态控件,必须在事件生命周期的Init阶段创建它们。

另外,当你将图像按钮添加到表格的单元格时,你说你正在遍历Form的控件。你是递归地降序控制层次以寻找图像按钮吗?