2.2 HTML服务器控件概述
经过2.1节对ASP.NET服务器控件的阐述,相信你已经对ASP.NET服务器控件有了一定的了解,现在就来深入地学习ASP.NET的HTML服务器控件。
2.2.1 HTML标签和HTML服务器控件之间的区别
早期的Web开发只能够使用HTML来开发Web页面,这种HTML标签给开发过程带来了许多的不便,比如无法利用程序直接来控制这些HTML标签的属性、使用方法和接收事件等,我们只能够借助于网页脚本语言(如JavaScript等)来间接地控制这些HTML标签。
而在ASP.NET中提供了HTML服务器控件之后,这些难以控制的HTML标签有了更好的选择方案。我们既可以保留原来的HTML标签使用方法,也可以把它转换成服务器控件从而直接在程序中控制,其转换方法就是上面所讲的—向这些HTML标签添加runat="server"属性,如<input id="Button1"type="button"runat="server"value="提交"/>。当然,为了能够方便地通过编程方式引用该HTML服务器控件,还需要设置该控件的id(如id="Button1")属性((Atribute),然后可以通过设置属性来声明HTML服务器控件实例上的属性((Poperty)参数和事件绑定。
从上面的阐述中可以看出,HTML标签和HTML服务器控件之间存在的区别就是:HTML服务器控件运行于服务器端,而HTML标签运行于客户端。具体来说,当ASP.NET网页执行时,会检查HTML标签有无runat属性,如果该HTML标签没有设定runat属性,那么这个HTML标签就会被视为字符串,并被送到字符串流等待送到客户端,客户端的浏览器会对其进行解释;如果HTML标签设定了runat="server"属性,Page对象会将该控件放入控制器,服务器端的代码就能对其进行控制,等到控制执行完毕后再将HTML服务器控件的执行结果转换成HTML标签,然后当成字符串流发送到客户端进行解释。
2.2.2 HTML服务器控件的类层次结构
在ASP.NET中,所有的HTML服务器控件都定义在System.Web.UI.HtmlControls命名空间中,它们可以根据控件是否是输入控件(派生于HtmlInputControl)或者是否包含其他控件(也可称为容器控件,它们派生于HtmlContainerControl)来划分为几大类,可以用图2-2来描述这种结构。
如图2-2所示,所有的HTML服务器控件都派生自HtmlControl基类,并提供大概20多个独立的HTML服务器控件类,这些控件类映射的HTML元素如表2-3所示。它们提供以下功能:
1)每个服务器控件都公开一些属性((Poperty)。可以使用这些属性((Poperty)在服务器代码中以编程方式来操作该控件的标记属性((Atribute)。
2)每个服务器控件都提供一组事件。可以为其编写事件处理程序,方法与在基于客户端的窗体中大致相同,所不同的是事件处理是在服务器代码中完成的。
3)除了可以在服务器代码中处理事件,还可以在客户端脚本中处理事件。
4)自动维护控件状态。在页到服务器的往返行程中,将自动对用户在HTML服务器控件中输入的值进行维护,并发送回浏览器。
5)与ASP.NET验证控件进行交互,因此可以验证用户是否已在控件中输入了适当的信息。
6)数据绑定到一个或多个控件属性。
7)支持样式。
图 2-2 HTML服务器控件的类层次结构
8)直接可用的自定义属性。可以向HTML服务器控件添加所需的任何属性,页框架将呈现这些属性,而不会更改其任何功能。这允许你向控件添加浏览器特定的属性。
2.2.3 HTML服务器控件的共有属性
如前文所讲到的,在ASP.NET中,每个HTML服务器控件都有自己的属性((Poperty),你可以使用这些属性((Poperty)在服务器代码中以编程方式来操作该控件的标记属性((Atribute),并且在HTML服务器控件上声明的任何属性((Poperty)都将添加到该控件的Attributes集合中,也可以像属性((Poperty)那样以编程方式对它进行操作。例如,如果在<body>元素上声明bgcolor属性,即可以编程方式访问该属性并编写事件处理程序以更改它的值。
1.所有HTML服务器控件共享的属性
在这些HTML服务器控件中,存在着一些共享的属性,如表2-4所示。
2.所有HTML输入控件共享的属性
HTML输入控件派生自HtmlInputControl,包括HtmlInputText、HtmlInputPassword、HtmlInputButton、HtmlInputSubmit、HtmlInputReset、HtmlInputCheckBox、HtmlInputImage、HtmlInputHidden、HtmlInputFile和HtmlInputRadioButton控件。它允许用户交互,主要用于处理用户的数据输入与提交操作,并映射到标准HTML输入元素。其中,Type属性定义它们在网页上呈现的输入控件的类型,它们共享下列属性,如表2-5所示。
3.所有HTML容器控件共享的属性
HTML容器控件派生于HtmlContainerControl,包括HtmlTableCell、HtmlTable、HtmlTableRow、HtmlButton、HtmlForm、HtmlAnchor、HtmlGenericControl、HtmlSelect和HtmlTextArea控件。它映射到HTML元素,这些元素必须具有开始和结束标记,如<textarea id="TextArea1"cols="20"rows="2"></textarea>和<select id="Select1">……</select>元素,它们共享下列属性,如表2-6所示。