最近在公司从事的一项web表单的还原,采用ASP.NET的服务器端自定义控件还原表单,其中涉及到的许多自定义控件的技术要点对于每一个自定义的服务器端控件具有普遍性,现将各个技术要点向各位简要介绍,源代码不能提供(涉及公司利益)。
使用ASP.NET服务器端自定义控件从XML文件中读入表单的信息(表单的各个控件),动态的生成各个控件。涉及几个技术点,
1、 读XML文件
2、 复合控件
3、 控件数组
4、 编程方式控制控件的各种属性。
5、 呈现HTML方法
服务器端控件是一组逻辑,提供了一个独立于浏览器的用户接口组件,它包含方法和属性,当页面提交时,它在服务器中引发事件,服务器控件可以探测客户设备的类型,然后以所支持的标记语言呈现自己。它支持的标记语言包括HTML、XML和DHTML。
² 读取XML,这个我就不说了
² 服务器控件的生命周期:
² 复合控件:使用类的组合(在父控件中结合使用两个或者更多的控件),从而创建复合控件。这个新控件中使用的控件此时都是子控件,但生成的控件包含了所有子控件的功能,新控件呈现了一个用户接口,可以重用已有控件的功能,包括这些控件的属性和事件。父控件可以处理由子控件引发的事件。创建复合控件时需要考虑两件事。为了控件添加到控件集中去,必须重写受保护的CreateChildControls()方法,该方法从控件继承下来的。在该方法中使用Controls.Add()方法添加每个子控件到控件树中。
为了避免子控件与页面其他控件之间的命名冲突,就必须使用INamingContainer接口。如果控件有任何类型的数据绑定,或者它是模版控件,或者它需要向子控件发送事件,就需要使用这个接口。(注意:子控件为控件处理所有的呈现,因此不需要重写Render()方法)。
² 控件数组:由于在还原表单中,存在大量的同类型的控件,最直接的数据结构就是数组,可是.net framework不支持控件数组,通过查找资料,找到一种方法模拟控件数组:使用CollectionBase类,该类提供了一个抽象的强类型集合的基类.我们可以用它来实现我们的控件数组。控件数组中可以包含任意数量的控件。
² 呈现服务器控件:还原表单中有线条等表单元素没有对应的服务器标准控件,需要通过编程方式控制服务器端控件的呈现;这里使用的关键类是HtmlTextWritter:不仅可以编写HTML内容和文本,在把HTML内容呈现到请求客户端时,它还提供了格式化的能力,包括标记管理、为HTML内容添加样式等。