服务器控件开发基础
当开发一个服务器控件时首先要明白其内部的工作机理其实在页面内部每一点由返回的HTML代码无论是简单的<span>标签或者是button按钮或者是复杂的gridview控件都是由继承自SystemWebUIControl的对象生成的
控件的属性
控制控件的方法大多是通过控件的属性来操作的通过控制服务器控件的属性就可以相应的改变服务器生成的html
下面是一个服务器控件的属性:
在Visual Studio里当通过属性窗口来改变控件的属性时VS会自动将属性添加到对应的aspx的HTML里而在html内添加属性时在属性窗口里也会对应显示更改过的属性视图比如
<asp:Button ID=Button runat=server Text=Button CommandName=cName />
在属性窗口里会对应显示如下图
当然某些控件的属性会略有不同比如常用的Label控件
<asp:Label ID=Label runat=server>这里是Text属性</asp:Label>
在开始符号和结束符号之间的内容会被设置成Text属性
当然最实用也是我们最常用的是通过C#以编程的方式动态的修改控件的属性这就不说了
控件的方法
控件通过方法来操作更加复杂的控件操作通常在控件的方法内部会有很复杂的过程一般包括几个内部函数和属性的组合比如
private void LoadDropDownList()
{
ArrayList list = new ArrayList();
listAdd(Hello);
listAdd(Goodbye);
GridViewDataSource = list;
GridViewDatabind();
}
这样通过调用Databind()方法就可以讲gridview和数据源进行绑定
控件的事件
控件通过事件来通知其它类或者客户端其内部的某个状态被改变事件是一种灵活的机制当控件与客户端进行交互的时候事件会通过Http Post方法和服务器进行交互通过自动回传机制WEB开发中的事件表现起来就会像开发Windows FORM程序一样(当然速度是无法和Form相比的)
在Visual Studio中可以在属性窗口中通过黄色的闪电图标来显示和控制控件的事件如下
当双击相应的事件后会在后台产生默认的处理方法命名规则为控件名_事件名
WEB Page
本质是一个控件树
在aspx页面的头部将Trace=true设置到Page后页面会显示相应的追蹤信息在Control Tree那一节你会发现整个页面其实就是一个控件树如图:
根控件?
OK既然页面的本质是一个控件树按照C#是完全面向对象的语言惯例(所有的一切都是继承于SystemObject)那么所有控件共同的父类是什么?
在中所有的控件被分布在个主要命名空间中分别为
SystemWebUI
SystemWebUIWebControls
SystemWebUIHtmlControls
它们之间的关系如下图所示
SystemWebUI命名空间
由上图可知SystemWebUI处于继承树顶端的而SystemWebUIControl是所有控件的基础所有的控件必须强制直接或者间接的继承Control类而直接继承Control类的是Page类以及UserControl类