已删除的事件处理程序在回发期间继续触发

本文关键字:继续 删除 事件处理 程序 | 更新日期: 2023-09-27 18:11:32

在检查和重新检查我的代码后,我无法理解为什么btnBack_Click事件在我删除事件并在Page_Load中注册另一个事件后继续触发

btnBack.Click -= new EventHandler(btnBack_Click);
btnBack.Click += new EventHandler(btnPreviewBack_Click);

是回发吗?是因为我没有把aspx上的OnClick取下来吗?

已删除的事件处理程序在回发期间继续触发

我们无法确切地看到在您的页面生命周期中您正在更改Click事件的位置,但是,请记住,绝对一切(只要事件处理程序更改)一旦生命周期开始就"撤消"(尽管导致回发的事件仍然执行)。

当回发发生时(无论是否异步),所有事件处理程序都将恢复到其原始配置。

最好的方法是将事件处理程序更改添加到Page_PreRender事件:

protected void Page_PreRender(Object sender, EventArgs e)
{
    if (_MustChangeEventHandler)
    {
        btnBack.Click -= new EventHandler(btnBack_Click);
        btnBack.Click += new EventHandler(btnPreviewBack_Click);
    }
}