回发后动态事件处理程序丢失

时间:2010-12-22 15:46:18

标签: asp.net webforms

我有一个带有按钮的asp.net页面,按钮需要执行的事件的点击事件需要变化,这取决于页面上方选择的选项。按钮本身包含在母版页中,它的操作会受到子页面中所做选择的影响。

为了做到这一点,我在母版页中有一个方法,当用户按下一个按钮时,子页面调用该方法,该按钮传递要由该按钮使用的Eventhandler,然后分配给masterpage eventhandler for那个按钮:

  public void assignEvent( EventHandler saveEvent)
    {
            this.SaveButtonEvent+= saveEvent
    }

然后,当母版页上的保存按钮时,它会调用该事件处理程序

protected void save_Click(object sender, EventArgs e)
    {
        if (this.SaveButtonEvent != null)
        {
            this.SaveButtonEvent(this, e);
        }
    }

在代码的第一部分中为事件处理程序分配了ok,但是因为按下save按钮会导致回发,所以SaveButtonEvent事件处理程序被设置为null,因此没有任何反应。

如何在回发期间保留SaveButtonEvent事件处理程序的内容,还是有更好的方法来执行此操作?

修改

我可以通过将EventHandler保存到会话中来实现这一点,但这似乎不是一个好主意。

1 个答案:

答案 0 :(得分:0)

当用户按下子页面中的按钮时,存储一个值(在视图状态中),指示应该传递哪个事件处理程序。然后,在子页面的load事件中,如果是回发,则始终检查存储的值并通过调用母版页方法相应地分配事件处理程序。