【问题标题】:Bubbling Events to Parent in ASP.NET在 ASP.NET 中将事件冒泡到父级
【发布时间】:2011-03-24 18:26:48
【问题描述】:

我在 ASP.NET 中说过这种层次结构:

page
  user control 1
     user control 2
         control 3

我想要做的是,当控件 3(它可以是任何类型的控件,我一般都想这样做)让用户使用它执行一些触发回发的操作时,它会冒出一些事件来用户控件 2,甚至可能是用户控件 1(尽管我也可以让 UC 2 手动冒泡事件)。

再次,我想通用地执行此操作,以便层次结构可以更改并且仍然有效。也许有多个控件(控件 4 等​​)或数据绑定控件。这可能吗?

谢谢。

【问题讨论】:

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


    【解决方案1】:

    事件冒泡内置在 asp.net 中

    看看这个:http://www.4guysfromrolla.com/articles/051105-1.aspx

    基本上,提出你想要冒泡的事件:

    RaiseBubbleEvent(this, args);
    

    然后抓住它:

    protected override bool OnBubbleEvent(object source, EventArgs e) {
        bool handled = false;
    
        if (e is TemplatedListCommandEventArgs) {
            TemplatedListCommandEventArgs ce = (TemplatedListCommandEventArgs)e;
    
            OnItemCommand(ce);
            handled = true;
        }
        return handled;
    }
    

    如代码所示,如​​果此方法返回 false,则事件将继续在控件层次结构中冒泡

    RaiseBubbleEvent 的实现 由 Control 提供,不能 被覆盖。 RaiseBubbleEvent 发送 事件数据向上到层次结构 控件的父级。处理或处理 引发冒泡事件,一个控件 必须覆盖 OnBubbleEvent 方法。

    来自 MSDN:http://msdn.microsoft.com/en-us/library/aa719644(v=vs.71).aspx

    【讨论】:

    • 好的,所以如果命令是一个按钮,按钮的点击会自动冒泡到用户控件,还是我必须显式调用冒泡。我认为控件必须通过调用 RaiseBubbleEvent 明确地冒泡事件,并且控件可能不一定自己这样做。正确的?它不像 Silverlight 那样自然发生隧道和冒泡。
    • 是的,它不像 Silverlight;您必须手动引发气泡事件。但是一旦你这样做了,它就会一直持续下去,直到你从 OnBubbleEvent 方法返回 true。
    猜你喜欢
    • 2021-09-05
    • 1970-01-01
    • 2010-12-07
    • 2015-09-30
    • 1970-01-01
    • 1970-01-01
    • 2017-05-02
    • 1970-01-01
    • 2020-08-07
    相关资源
    最近更新 更多