【Asp.Net】自定义控件?用户控件?还是新型的复合控件?

 

博客园的博客开通三天了,也没有任何文章和随笔。

今天就赶紧发第一篇随笔吧。

希望能够启发一些人。

大家都知道Net里面的用户控件和自定义控件吧。

其实不管是用户控件也好,自定义控件也好,都有他们各自的好处,也有他们各自的坏处。

下面就复制粘贴来大略地对比下:

-------------------------

    用户控件                       自定义控件

用 .ascx 文件表示            用 .DLL 文件表示
不出现在工具箱中             出现在工具箱中
支持缓存                        不支持缓存
提供有限的支持                提供全面支持

-------------------------

大家能看出些什么么?

我今天在这里既不说他们的表现形式和出现的地方,

也不说他们支不支持缓存和使用时支持的大小。

今天我在这里要说的是它们的最大优劣势:

----------------------------

                     用户控件                            自定义控件

优势         便于维护UI的HTML代码                便于封装

劣势            不便于封装                       难于维护UI的HTML代码

----------------------------

从上面的总结就可以看出:用户控件和自定义控件是互补的。

那么,我们在开发的时候,能否让他们取长补短,

设计出一种用户控件和自定义控件的结合体呢?

这样我就可以让用户控件部分负责维护该结合体的UI部分;

而自定义控件部分负责维护该结合体的业务逻辑部分。

答案是肯定的。

请看下列代码:

1 public abstract class CoalitionControl : Control, INamingContainer
2 {
3         public abstract  string CoalitionUIFileName{get;set;}
4         protected override void OnLoad(EventArgs e)
5         {
6               this.Controls.Add(this.Page.LoadControl(this.CoalitionUIFileName));
7         }
8 }

上面的代码是一个初步的结合体控件。

其中CoalitionUIFileName是一个用户控件路径,指向一个ascx文件。

当然要指出的一个缺点是:

把结合体控件从工具箱中拖到web可视化窗体后,不能即时查看结合体控件的布局,

那么如果要想查看布局,就必须去查看动态引入的ascx文件。

-----------------

更详细的实现代码暂不公开。

希望大家发挥自己的才能,去完善这个设计。

同时也希望能和大家多多交流,加个好友和关注之类,共享优秀的设计思想和框架。

-----------------

设计结果图

posted @ 2013-03-10 21:45  哈哈好玩  阅读(465)  评论(0编辑  收藏  举报