http://blog.csdn.net/ChengKing/archive/2009/01/01/3678388.aspx
艰难困苦,玉汝于成  能不能在app_code 下面写一个服务器控件呢?http://blog.csdn.net/ChengKing/archive/2009/01/01/3678388.aspx
网址
3.7.9  实现复合控件示例本节就基于前面几节的内容,实现一个复合控件Field。本控件由一个Label和一个TextBox控件组成,一般在界面上用于表示一个数据字段(标签+文本框)。从工具箱分别拖一个Label和一个TextBox控件,如果把这两个控件封装成一个Field控件,则仅需要拖一个Field控件就可以实现相同功能。另外,此控件还具有验证功能,开发人员可以任意设定验证表达式,来验证用户的输入。做好的控件在设计器中的样式如下:  下面来讲解此控件实现方案。首先建立一个继承CompositeControl类的Field类,如下所示: /// <summary>/// 获得本书更多内容,请看:/// http://blog.csdn.net/ChengKing/archive/2008/08/18/2792440.aspx/// </summary>[DefaultProperty("TextBoxValue")][ToolboxData("<{0}:Field runat=server></{0}:Field>")]public class Field : CompositeControl{    //… …}  u  接下来在类内部定义几个子控件和一些属性接口,代码如下:   1. private Label lb;
   2.
   3. private TextBox tb;
   4.
   5. private RegularExpressionValidator rev;
6.上面定义了三个子控件:
Label,TextBox,ReqularExpressionValidator。Label主要用来显示控件标题,TextBox主要用来显示控件值,RegularExpressionValidator控件是正则表达式验证控件,主要用来验证用户输入值(即TextBox的值)。LabelTitle属性功能是获取或设置Label子控件的值。注意代码this.EnsureChildControls()的主要功能是保证访问子控件时,子控件集合对象已经被创建。EnsureChildControls方法内部的逻辑是先判断子控件集对象是否被创建,如果没有创建,它会调用CreateChildControls方法创建子控件集对象。/// <summary>