ImageClickEvenHandler不调用处理程序

时间:2009-01-13 11:12:38

标签: asp.net

我有一个动态创建的表格,在某些单元格中,我有一个与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对象)

3 个答案:

答案 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
}