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 に答える