在WebForms中,为什么在OnLoad之后添加我的匿名事件处理程序时不会被调用?

时间:2013-08-07 09:18:53

标签: asp.net event-handling webforms page-lifecycle anonymous-methods

我有一个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的精美备忘单。

1 个答案:

答案 0 :(得分:1)

在页面生命周期中,内部RaisePostBackEvent方法(引发按钮的Click事件)在 OnLoadOnLoadComplete之间发生。如果您等到OnLoadComplete添加LinkButton并挂钩其Click事件,那么很明显不会引发该事件:为时已晚。

(您使用匿名方法的事实无关紧要。)

您可以在.aspx中添加导出按钮,但在不希望它出现时将其Visible属性设置为false吗?