为什么我的EventHandler没有被解雇? (Asp.Net C#)

时间:2009-01-24 09:45:34

标签: c# asp.net

我正在以编程方式制作一些LinkBut​​tons,并且它们工作了一段时间,但现在事件没有解雇,我无法弄清楚为什么?

这就是按钮的作用:

protected void MakeUploadButton(attachment a, PlaceHolder ph)
{
    LinkButton lb = new LinkButton()
    {
        Text = "Upload New " + a.attachment_type.type_name,
        CssClass = "button right",
        ID = "lb" + a.attachment_type.file_tag,
        CommandArgument = a.attachment_type_id.ToString(),
        CommandName = a.attachment_type.type_name,
        CausesValidation = false
    };
    lb.Click += new EventHandler(showModalPopup);
    lb.DataBind();
    ph.Controls.Add(lb);
}

ShowModalPopup 存在,但是当我在Debug中运行它时,它内部的任何内容都不会触发......出于某种原因,它不会被调用。有什么想法吗?


在这里找到了答案: http://bytes.com/groups/net-asp/329287-linkbutton-event-not-firing

2 个答案:

答案 0 :(得分:2)

这是因为如果没有在viewstate中设置,.NET会在回发时核对一个元素事件处理程序。您需要做的就是在onload事件中重新附加eventhandler。

Protected Sub Page_Load(sender As Object, e As EventArgs) Handles MyBase.Load
   If Page.IsPostBack Then
      Dim lb as ListButton = TryCast(Page.FindControl("IDOfControl"), LinkButton)
      lb.Click += new EventHandler(showModalPopup);
   End If
End Sub

答案 1 :(得分:0)

确保在每个页面循环中创建控件(也可以回发)。这个MSDN article很好地概述了ASP.NET页面生命周期。

  

已添加控件的追赶事件

     

如果动态创建控件   运行时或以声明方式编写   在数据绑定模板中   控制,他们的事件最初   与其他人不同步   页面上的控件。例如,对于   在运行时添加的控件,   可能会发生Init和Load事件   比页面生命周期晚得多   创建的控件的相同事件   声明。

     

因此,从   他们被实例化的时间,   动态添加控件和   模板中的控件提升了它们   一个接一个的事件,直到他们   已经赶上了这个活动   它被添加到控件中   集合。