为什么事件冒泡以及为什么不直接订阅click事件?

时间:2010-07-02 18:17:51

标签: asp.net events oop encapsulation

我正在浏览一篇关于asp.net中事件冒泡的文章,并且知道虽然可以从包含页面订阅用户控件按钮的click事件,但这样做会破坏一些对象面向封装的规则“。更好的想法是在用户控件中发布一个事件,以允许任何感兴趣的各方处理该事件。

我的问题是,如何从包含页面直接订阅按钮的click事件会破坏面向对象的封装规则?

道歉,如果它是一个愚蠢的问题。 :|

谢谢!

2 个答案:

答案 0 :(得分:3)

这个想法是控件的按钮是控件的UI的实现细节。如果您重新发布click事件,则可以将该按钮重新实现为ImageButton,LinkBut​​ton等。

我认为如果按钮是UI的永久固定,可以在页面级别将事件处理程序附加到按钮。它节省了大量的事件代码,特别是有很多按钮。

答案 1 :(得分:3)

Button应该由UserControl封装。

如果Page直接绑定到按钮上的事件,则页面现在依赖于UserControl的内部工作

页面应该使用UserControl,而不是UserControl的按钮。如果UserControl的作者后来想要删除该按钮并使用一些花哨的新方法来触发其“提交”事件,那么您的页面可能会被破坏,因为该按钮可能不再存在。

就此而言,如果UserControl的所有者在v1.1中决定将按钮从btnSubmit重命名为SubmissionButton,那么它也可能会破坏你的页面。

最好使用UserControl并让它关注自己的内部工作。