可能usercontrol没有阻止事件继续冒泡,所以到顶级了

解决方案 »

  1.   

    请问一下如何阻止呀?对了不阻止的话,就会一直冒到顶级是不?对了还有一个冒泡问题,因为没分了,所以在这里一同问一下:
    我用的是帮助文档里的例子
    public class ChildControl : Button
        {
            [System.Security.Permissions.PermissionSet(System.Security.Permissions.SecurityAction.Demand, Name = "FullTrust")]
            protected override void OnClick(EventArgs e)
            {
              // base.OnClick(e);
               // Context.Response.Write("<br><br>ChildControl's OnClick called.");
                // Bubble this event to parent.
                RaiseBubbleEvent(this, e);
            }    }
    页面上拖放上这个控件,页面重写:protected override bool OnBubbleEvent(object source, EventArgs e)
        {
            if (e is CommandEventArgs)
            {
                CommandEventArgs ce = (CommandEventArgs)e;
                if (ce.CommandName == "Click")
                {
                    if (DCommand != null)
                    {
                        DCommand(source, e);                }
                    return true; 
                }
            }
            return false;    }
    跟踪时发现RaiseBubbleEvent执行了两遍,所以OnBubbleEvent也执行了两次,第一次时e不是CommandEventArgs这个类型的,每二次e才是这个类型的,请问一下为什么会执行两次?
      

  2.   

    数据绑定控件(Repeater、DataList 和 DataGrid)使用事件冒泡将子控件(在项目模板内)引发的命令事件公开为顶级事件。
      

  3.   

    跟踪时发现RaiseBubbleEvent执行了两遍,所以OnBubbleEvent也执行了两次,第一次时e不是CommandEventArgs这个类型的,每二次e才是这个类型的,请问一下为什么会执行两次?========Button/LinkButton/ImageButton 比较特殊,同时会出发 Command 和 Click 事件
      

  4.   

    protected void GridView1_SelectedIndexChanged(object sender, EventArgs e)
    {
    RaiseBubbleEvent(sender, e); // 你要明白,此时你调用的 RaiseBubbleEvent 方法是 MyUserControl.RaiseBubbleEvent,并且 RaiseBubbleEvent 是将指定事件分配给调用方(这里是你的 MyUserControl)的父控件,而在这里你的 MyUserControl 的父控件是 .aspx 
    }好好理解吧,其实答案是显然的
      

  5.   

    同上,这个很正常,一般来说应该是产生两次,rowcommand或者itemcommand会触发,不过你可以通过设置commandname来过滤,然后就是相应的gridview提供的事件