【问题标题】:Dynamic Event Handler lost after postback回发后动态事件处理程序丢失
【发布时间】:2010-12-22 15:46:18
【问题描述】:

我有一个带有按钮的 asp.net 页面,按钮需要对其执行的单击事件需要有所不同,具体取决于页面上方选择的选项。按钮本身包含在母版页中,其操作受子页中的选择影响。

为此,我在母版页中有一个方法,由子页调用,当用户按下按钮时,传递事件处理程序供该按钮使用,然后分配给母版页事件处理程序用于那个按钮:

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

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

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

事件处理程序在第一部分代码中分配正确,但是由于按下保存按钮会导致回发,SaveButtonEvent 事件处理程序被设置回为空,因此没有任何反应。

如何在回发期间保留 SaveButtonEvent 事件处理程序的内容,或者有更好的方法吗?

编辑:

我可以通过将 EventHandler 保存到会话中来使其工作,但这似乎不是一个好主意。

【问题讨论】:

  • 您能展示一下您是如何创建按钮的吗?以声明方式还是以编程方式?如果是这样,在 Page Live Cycle 的哪个位置?
  • 另外,您可以使用按钮的 CommandArgument(请参阅 msdn.microsoft.com/de-de/library/…),然后让案例处理您的各种选项。

标签: asp.net webforms


【解决方案1】:

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

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2010-11-18
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2017-12-16
    • 2022-09-26
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多