使用.NET一年多了,前不久开始迷上了.NET的控件开发,发觉这真是一个表现创造力的工作:)。

前不久应公司要求写一个在公司网站全站通用的留言本,因为公司旗下网站(www.163888.net)内容比较庞杂,而且时常会出现各种活动,留言本的使用频率非常高,而原先的方法是每次活动都从新开发一个留言本,实在是非常不科学的方式,而实际上每个留言本的逻辑处理基本上是一致的,因此才有了开发一个全站通用的留言本的想法。

任务到手之后,思考实现时,第一个想到了动态调用.ascx文件的方式来写一个复合控件,但是经过再三考虑之后,发觉这个方法存在不少问题。

虽然它达到了同一逻辑结构,灵活换肤的需求,但是正如我先前所说留言本在本站使用频率很高,这样每次使用都会产生1-2个.ascx文件,感觉上有点累赘。

经过再三考虑,无意中想到了Repeater这个控件,它使用ItemTemplate和AlternatingItemTemplate两个属性灵活包含模板而不产生.ascx文件,这不正是我所需要的吗?我何不写一个控件内部绑定数据的类似Repeater的控件?

有了这个想法之后,立刻使用Reflector打开了System.Web.dll找到了Repeater控件,参考着完成了下面的GuestBook控件。

 

  1.NET复合控件开发随笔(一)using System;
  2.NET复合控件开发随笔(一)using System.Web.UI;
  3.NET复合控件开发随笔(一)using System.Web.UI.WebControls;
  4.NET复合控件开发随笔(一)using System.ComponentModel;
  5.NET复合控件开发随笔(一)using System.Collections;
  6.NET复合控件开发随笔(一)using SunBird.Controls;
  7.NET复合控件开发随笔(一)using SunBird.Components;
  8.NET复合控件开发随笔(一)
  9.NET复合控件开发随笔(一)namespace SunBird.GuestBookControl
 10}

 

如果使用这样一个控件,在页面注册之后只需要使用它的ItemTemplate和AlternatingItemTemplate属性就可以加载模板了,比原先设想的动态加载.ascx文件的方式要好得多,如:

 

 

 

 

这样就完成了该控件的定义,PagerTemplate属性是分页显示。

下面是留言本信息的发布,发不分两种:1、需要登录,2、不需要登录。

于是分别写了三个控件类:

1、GuestBookCreateBase (基类) 它定义了大部分的功能。

 

 1.NET复合控件开发随笔(一)using System;
 2.NET复合控件开发随笔(一)using System.Web.UI.WebControls;
 3.NET复合控件开发随笔(一)using SunBird.Components;
 4.NET复合控件开发随笔(一)
 5.NET复合控件开发随笔(一)namespace SunBird.GuestBookControl
 6}

 

2、CreatePostNeedLogin : GuestBookCreateBase 需要登录,他实际上只是override了基类的CreateButton_Click方法,为该方法加入了验证登录的操作。

 

 1.NET复合控件开发随笔(一)using System;
 2.NET复合控件开发随笔(一)using System.Web.UI.WebControls;
 3.NET复合控件开发随笔(一)using SunBird.Components;
 4.NET复合控件开发随笔(一)
 5.NET复合控件开发随笔(一)namespace SunBird.GuestBookControl
 6}

 

3、CreatePostNotNeedLogin : GuestBookCreateBase 不需要登录,实际上该类没有做任何操作仅仅只是为了方便其他人使用。

 

 1.NET复合控件开发随笔(一)using System;
 2.NET复合控件开发随笔(一)using System.Web.UI.WebControls;
 3.NET复合控件开发随笔(一)
 4.NET复合控件开发随笔(一)namespace SunBird.GuestBookControl
 5}

 

控件的核心的类差不多就这几个,完整的代码如果有兴趣,请下载附件查看。

终于找到上传附件的地方了,下面是源代码,有兴趣的朋友可以下载看看,如果你有更好的方法请一定告诉我。

GuestBookControl源代码

相关文章:

  • 2021-08-07
  • 2021-05-28
  • 2021-08-07
  • 2021-10-24
  • 2021-12-19
  • 2021-11-12
猜你喜欢
  • 2021-08-28
  • 2021-05-26
  • 2021-07-26
  • 2021-07-05
  • 2022-02-03
  • 2021-11-23
相关资源
相似解决方案