1

我有一个 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()orOnPreLoad()方法的路径调用该方法,就可以了。AddExportButton()但是,当从OnLoadComplete()方法调用时,它不会触发处理程序操作。

当另一个事件处理程序(来自下拉列表)被调用时,我也想添加/创建按钮。这只发生在 OnLoad() 之后,这会破坏我的代码。

为什么会这样,在这种情况下如何使用匿名方法作为事件处理程序?

有关页面/控件创建顺序的更多信息,请参阅 Léon Andrianarivony 撰写的关于ASP.NET 页面生命周期的漂亮备忘单。

4

1 回答 1

1

在页面生命周期中,内部RaisePostBackEvent方法(引发按钮Click事件)发生 OnLoad和之间OnLoadComplete。如果你等到OnLoadComplete添加LinkButton并连接它的Click事件,那么显然不会引发该事件:为时已晚。

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

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

于 2013-08-09T16:56:40.027 回答