日期:2014-05-19  浏览次数:20430 次

关于控件的冒泡事件的疑惑
1     冒泡事件是否只适用用webctrol?对于htmlctrol对象是无效的但是OnBubbleEvent是来源control对象的,按道理是都支持的。结果却是只能webctrol适用。为何?
2     如果组件继承是control而不是从复合控件CompositeControl继承的话,也是不能引起冒泡的。
3   关于PostBackOptions是否也同理,只对webcontrol有效?


------解决方案--------------------
这是因为Button自己有对RaiseBubbleEvent处理,而你的HtmlInputButton没对RaiseBubbleEvent处理吧。

看msdn的说法:

下面的示例重写自定义 ASP.NET 服务器控件 ParentControl 中的 OnBubbleEvent 方法。在 ParentControl 的子控件调用 RaiseBubbleEvent 方法时会调用此方法。当这种情况发生时,ParentControl 类将两个字符串写入包含 ASP.NET 的页中,第一个字符串说明其 OnBubbleEvent 方法已被调用,第二个字符串标识 RaiseBubbleEvent 方法的源控件。

public class ParentControl : Control
{
[System.Security.Permissions.PermissionSet(System.Security.Permissions.SecurityAction.Demand, Name= "FullTrust ")]
protected override bool OnBubbleEvent(object sender, EventArgs e)
{
Context.Response.Write( " <br> <br> ParentControl 's OnBubbleEvent called. ");
Context.Response.Write( " <br> Source of event is: " + sender.ToString());
return true;
}
[System.Security.Permissions.PermissionSet(System.Security.Permissions.SecurityAction.Demand, Name= "FullTrust ")]
protected override void Render( HtmlTextWriter myWriter)
{
myWriter.Write( "ParentControl ");
RenderChildren(myWriter);
}
}


------解决方案--------------------
1、要触发冒泡事件,必须自己调用RaiseBubbleEvent方法。
2、并不是HtmlButton不会引发冒泡事件,而是HtmlButton没有需要冒泡的事件Command。