5.1 HTML服务器控件
HTML服务器控件包括runat=“server”属性的HTML元素。HTML服务器控件与它们对应的HTML标记具有相同的属性。此外,HTML服务器控件还提供自动状态管理和服务器端事件。HTML服务器控件与其相应HTML标记一一对应。
5.1.1 HTML服务器控件简介
HTML服务器控件是具有runat=server属性的HTML控件。在系统编译过程中,具有此属性的控件都将作为服务器控件被系统重新编译,并且加入到后台的执行程序中。大多数控件都包括该控件最常用事件的OnServerEvent,例如,<input type=button>控件包含OnServerClick事件。没有实现为特定HTML服务器控件的HTML标记仍可用于服务器端。但是,它们将被作为HtmlGenericControl添加到程序集。重新提交到页面后,HTML服务器控件将保留它们的值。
System.Web.UI.HtmlControls.HtmlControl基类包含所有常用属性。HTML服务器控件派生于此类中。
5.1.2 HtmlContainerControl和HtmlInputControl类
HtmlContainerControl为映射到需要具有开始标记和结束标记的HTML服务器控件的抽象基类,就是所有控件容器控件类的基类。这个基类的属性,方法和事件如表5-1~表5-3所示。
表5-1 HtmlContainerControl属性
表5-2 HtmlContainerControl方法
表5-3 HtmlContainerControl事件
HtmlInputControl是所有与用户交互的HTML控件的基类。如输入框等,下面列表中的控件都是继承于这个基类,如表5-4所示。
表5-4 继承于HtmlInputControl基类的控件
HtmlInputControl基类的属性、方法和事件如表5-5~表5-7所示。
表5-5 HtmlInputControl基类的属性
表5-6 HtmlInputControl基类的方法
表5-7 HtmlInputControl基类的事件
5.1.3 HTML控件类
在开发的程序中会用到很多HTML类型的控件,其实无论是服务器的控件还是客户端的控件,最终都将全部解释成为客户端控件,以字节流的形式发送给客户端,再由客户端的浏览器解释成页面呈现给客户。不同的是,.NET的控件是需要服务器端解释的,而HTML控件是不需要服务器端解释,HTML控件是直接发送给客户端的,这也是HTML页面的访问速度要远远高于服务器页面的一个主要原因。表5-8列举了一些HTML控件类。
表5-8 HTML控件类
5.1.4 编程创建HTML控件
HTML控件不只是用设计模式添加,还可以以编程的方式添加。现在使用编程的方式创建HTML控件看看效果。在程序中首先要引用一个特定的命名空间:
using System.Web.UI.HtmlControls;这个命名空间是使用HTML控件类提供基础支持,代码如下。
代码中首先创建一个表格对象,定义一个行和列的对象,外循环为行分配对象空间,然后为行对象设置属性,在内循环中为列对象分配对象空间,为列对象设置属性,然后将列对象添加到行对象中,在内循环结束后,将行对象添加到表格对象中,最后将整个的表格对象添加到表单对象中,完成了整个的添加过程,输出结果如图5-1所示。
图5-1 输出结果
5.1.5 处理服务器端事件
在前面研究了HTML控件类,下面介绍HTML控件类的服务器事件。通过服务器控件的事件,客户端就能同服务器直接交互,代码如下。
执行结果如图5-2所示。
图5-2 HTML按钮控件的客户端事件
上述代码中HTML的按钮控件添加了一个单击事件,但这个事件是客户端事件。下面演示HTML的按钮控件添加一个服务器端事件,代码如下。
后台代码如下。
后台代码输出结果如图5-3所示。
图5-3 为HTML的按钮添加的后台事件执行结果
在上面的代码中为HTML服务器控件添加了一个服务器端的事件,这样就可以使用HTML控件执行服务器端的代码,从而使程序更加灵活。