2

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

btnBack.Click -= new EventHandler(btnBack_Click);

btnBack.Click += new EventHandler(btnPreviewBack_Click);

是回传吗?是因为我没有删除OnClickaspx上的吗?

4

1 回答 1

3

我们无法确切地看到您在页面生命周期中的哪个位置更改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);
    }
}
于 2013-05-01T04:06:51.617 回答