我正在以编程方式制作一些LinkButtons,并且它们工作了一段时间,但现在事件没有解雇,我无法弄清楚为什么?
这就是按钮的作用:
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
答案 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事件 比页面生命周期晚得多 创建的控件的相同事件 声明。
因此,从 他们被实例化的时间, 动态添加控件和 模板中的控件提升了它们 一个接一个的事件,直到他们 已经赶上了这个活动 它被添加到控件中 集合。