我有一个动态创建的表格,在某些单元格中,我有一个与redBall_Click()处理程序关联的图像按钮
(这是背后的代码)
TableCell cellOK = new TableCell();
cellOK.Style.Add(HtmlTextWriterStyle.TextAlign, "Center");
cellOK.Width = new Unit("3%");
ImageButton redBall = new ImageButton();
redBall.CausesValidation = false;
redBall.ID = id;
redBall.ImageUrl = "~/App_Themes/DotRed.png";
redBall.Click += new ImageClickEventHandler(redBall_Click);
cellOK.Controls.Add(redBall);
我的问题是从不调用redBall_Click()方法(在PostBack之后都没有)
我该如何解决这个问题?
P.S。 :我不能使用静态链接,因为每个ImageButton都与我必须传递给我调用的页面的特定ID相关联(例如作为Session对象)
答案 0 :(得分:1)
您必须在OnInt中设置事件处理程序,并在每次创建页面时执行此操作,即使在回发期间也是如此。确保不将代码包含在以下块中:
if(!this.IsPostback)
{
...
}
答案 1 :(得分:0)
在单击图像之前,您是否尝试在页面加载方法中添加断点?我怀疑这可能表明回发正在发生,即使图像点击处理程序没有被解雇。
在回发期间是否也调用了创建图像按钮的代码?如果没有,页面将回发,但图像按钮将不存在以调用点击处理程序。听起来很奇怪,但它让我感到很沮丧。
答案 2 :(得分:0)
我终于解决了(就在昨天)。
我想我的构建按钮的时间太晚了:在Page_PreRender中(在事件发生之后)也许如果我把创建放在Page_Load中(是的,我也在PostBack上创建了所有内容)它会处理点击,但是我想我不会尝试,因为我找到了解决方法。
我会向任何可能遇到同样问题的人解释:
private TableCell cellOK(string id)
{
TableCell cellOK = new TableCell();
cellOK.Style.Add(HtmlTextWriterStyle.TextAlign, "Center");
Image redBall = new Image();
redBall.ID = id; // useless
redBall.ImageUrl = "redball.gif";
HyperLink hl = new HyperLink();
hl.Controls.Add(redBall);
hl.NavigateUrl = MyPage + "?id=" + id;
cellOK.Controls.Add(hl);
return cellOK;
}
和Page_Init()
string m_QueryStringId = Request.QueryString.Get("id");
if (!string.IsNullOrEmpty(m_QueryStringId))
{
// Do something
}