我有一个ASP.NET WebForms页面,其中有几个按钮以编程方式添加:
private void AddExportButton(Control control, Action clickAction) {
LinkButton exportButton = new LinkButton {
Text = "Export",
EnableViewState = false /*Buttons will be recreated on each Postback anyway.*/
};
exportButton.Click += (sender, e) => clickAction();
control.Controls.Add(exportButton);
}
现在,只要在AddExportButton()
或OnLoad()
方法的路径中调用OnPreLoad()
方法,这就行了。但是,当从AddExportButton()
方法调用OnLoadComplete()
时,它不会触发处理程序操作。
我想在调用另一个事件处理程序(来自下拉列表)时添加/创建按钮。这只发生在OnLoad()之后,这将破坏我的代码。
为什么会这样,在这种情况下如何使用匿名方法作为事件处理程序?
有关页面/控件创建顺序的详细信息,请参阅LéonAndrianarivony关于ASP.NET Page LifeCycle的精美备忘单。
答案 0 :(得分:1)
在页面生命周期中,内部RaisePostBackEvent
方法(引发按钮的Click
事件)在 OnLoad
和OnLoadComplete
之间发生。如果您等到OnLoadComplete
添加LinkButton
并挂钩其Click
事件,那么很明显不会引发该事件:为时已晚。
(您使用匿名方法的事实无关紧要。)
您可以在.aspx中添加导出按钮,但在不希望它出现时将其Visible
属性设置为false吗?