代码之家  ›  专栏  ›  技术社区  ›  naspinski

为什么我的事件处理程序不启动?(ASP.NET公司)

  •  0
  • naspinski  · 技术社区  · 15 年前

    我正在编程制作一些链接按钮,它们运行良好一段时间,但现在事件没有启动,我不知道为什么?

    这就是为什么按钮:

    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);
    }
    

    显示弹出窗口 存在和所有,但是当我在调试中运行它时,它里面的任何东西都不会触发…因为某种原因,它没有被呼叫。有什么想法吗?


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

    2 回复  |  直到 11 年前
        1
  •  2
  •   Alex    15 年前

    这是因为.NET如果不在ViewState中设置元素事件处理程序,则会在回发时对其进行核处理。您所需要做的就是在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
    
        2
  •  0
  •   splattne    15 年前

    确保在每个页面周期上创建控件(也回发)。这个 MSDN article 对ASP.NET页的生命周期进行了很好的概述。

    为添加的控件追赶事件

    如果在动态创建控件 运行时或以声明方式编写 在数据绑定模板内 控件,其事件最初是 与其他的不同步 页面上的控件。例如,对于 在运行时添加的控件, 可能会发生初始化和加载事件 在页面生命周期中比 创建的控件的相同事件 声明性地。

    因此,从 它们被实例化的时间, 动态添加的控件和 模板中的控件提高 一个接一个的事件,直到他们 在 它被添加到控件中 收集。