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

时间:2013-05-01 03:43:57

标签: c# asp.net events event-handling

在检查并重新检查我的代码后,我无法理解为什么btnBack_Click事件在我删除事件并在Page_Load

中注册了另一个事件后继续触发
btnBack.Click -= new EventHandler(btnBack_Click);

btnBack.Click += new EventHandler(btnPreviewBack_Click);

是回发吗?是因为我没有删除aspx上的OnClick吗?

1 个答案:

答案 0 :(得分:3)

我们无法确切地看到Page Lifecycle您要更改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);
    }
}