我正在浏览一篇关于asp.net中事件冒泡的文章,并且知道虽然可以从包含页面订阅用户控件按钮的click事件,但这样做会破坏一些对象面向封装的规则“。更好的想法是在用户控件中发布一个事件,以允许任何感兴趣的各方处理该事件。
我的问题是,如何从包含页面直接订阅按钮的click事件会破坏面向对象的封装规则?
道歉,如果它是一个愚蠢的问题。 :|
谢谢!
答案 0 :(得分:3)
这个想法是控件的按钮是控件的UI的实现细节。如果您重新发布click事件,则可以将该按钮重新实现为ImageButton,LinkButton等。
我认为如果按钮是UI的永久固定,可以在页面级别将事件处理程序附加到按钮。它节省了大量的事件代码,特别是有很多按钮。
答案 1 :(得分:3)
Button应该由UserControl封装。
如果Page直接绑定到按钮上的事件,则页面现在依赖于UserControl的内部工作。
页面应该使用UserControl,而不是UserControl的按钮。如果UserControl的作者后来想要删除该按钮并使用一些花哨的新方法来触发其“提交”事件,那么您的页面可能会被破坏,因为该按钮可能不再存在。
就此而言,如果UserControl的所有者在v1.1中决定将按钮从btnSubmit重命名为SubmissionButton,那么它也可能会破坏你的页面。
最好使用UserControl并让它关注自己的内部工作。