第2章 HTML服务器控件

我们知道,一个完整的ASP.NET Web窗体由页面指令(如@Page)、HTML文档头head、HTML文档体body、窗体元素form与页面执行代码(包括客户端代码与服务端代码)这五大部分组成。其中,服务器控件是窗体元素form的基本组成元素,它简化了页面的开发过程,它为代码复用和封装提供了一种机制,非常适合作为Web快速应用开发((Rpid Application Development, RAD)的设计工具。此外,服务器控件可灵活扩展的特性为众多Web开发者敞开了令人激动的自定义控件设计的大门,让你可以在它的基础之上打造属于自己的特有控件。

本章将介绍ASP.NET服务器控件的相关知识,并重点讲解HTML服务器控件的使用。

2.1 ASP.NET服务器控件概述

前面的章节已经讲过,ASP.NET的最大特色就是提供了许多现成的开发控件,能让开发者通过“拖曳”的方式完成网页设计。

注意 如果页面包含允许用户交互并提交的控件,则该页面必须包含一个form元素,控件必须位于form元素内。form元素必须包含runat属性,其属性值设置为server,即runat=“server”。runat=“server”属性指示该表单应在服务器端进行处理,它同时指示包括在form元素内的控件可被服务器端脚本访问。对于ASP.NET而言,一个页面有且只能有一个<form runat=“server”>标记。

2.1.1 ASP.NET服务器控件的类型

在ASP.NET中,它提供了许多不同类型的服务器控件,按照Visual Studio工具栏的布局,可以把它们大致分为如下几种类型:

1)HTML服务器控件。HTML服务器控件是服务器可理解的HTML标签,它封装了标准的HTML元素。默认HTML元素是作为文本来进行处理的,要想使这些元素可编程,就需要向这些HTML元素添加runat="server"属性,如<input id="Button1"type="button"runat="server"value="提交"/>。其中,runat="server"表示该元素是一个服务器控件。除此之外,还需要添加id属性来标识该服务器控件,在实际开发中,id是非常重要的属性,使用id可以在代码里面自由地操作HTML服务器控件。

2)Web标准服务器控件。Web标准服务器控件是服务器可理解的特殊ASP.NET标签,类似于HTML服务器控件,Web标准服务器控件也在服务器上创建,它们同样需要runat="server"属性以使其生效。这些控件比HTML服务器控件具有更多内置功能,它不仅包括窗体控件(例如按钮和文本框),而且还包括具有特殊用途的控件(例如日历、菜单和树视图控件)。因此,与HTML服务器控件相比,Web标准服务器控件更为抽象。

3)验证控件。它的主要功能是验证用户输入,如果用户输入没有通过验证,将给用户显示一条错误消息。因此,验证控件可用于对必填字段进行检查,对照字符的特定值或模式进行测试,验证某个值是否在限定范围之内,等等。

4)导航控件。它实现了页面导航的功能,有了这个导航功能,用户可以很方便地在一个复杂的网站中进行页面之间的跳转。它包括SiteMapPath控件、Menu控件和TreeView控件。

5)数据控件。为了能够更好地满足对数据的复杂处理要求,Microsoft Expression Web提供了两种类型的ASP.NET数据控件:一种是数据源控件,用于设置数据库或XML数据源的连接属性;另一种是数据控件,用于显示来自数据源控件中指定的数据源的数据。这些将在后面详细讲解,同时,它也是本书的重点内容之一。

6)登录控件。登录控件可以算是ASP.NET的一大特色,你不必自行编写用于表单验证的界面就可以使用这些控件来获得预建的、可定制的登录页面、密码恢复和用户创建向导。在默认情况下,登录控件与ASP.NET成员资格和Forms身份验证集成,以使网站的用户身份验证过程自动化。

7)Web部件控件。ASP.NET Web部件是一组集成的控件,用于创建允许最终用户直接通过浏览器修改网页的内容、外观和行为的网站。这些修改适用于网站上的所有用户或个别用户。当用户修改网页和控件时,可以保存这些设置以便在以后的浏览器会话中保留用户的个人首选项,这种功能称为“个性化设置”。这些Web部件功能意味着开发人员可以使最终用户能够动态地对Web应用程序进行个性化设置,而无须开发人员或管理人员的干预。

8)ASP. NET AJAX控件。这些控件可以让你使用很少的客户端脚本或不使用客户端脚本就能使用Ajax技术,从而创建丰富的客户端行为,如在异步回发过程中进行部分页更新(在回发时刷新网页的选定部分,而不是刷新整个网页)和显示更新进度等。

2.1.2 ASP.NET服务器控件的类层次结构

在ASP.NET中,所有的服务器控件都是直接或间接地派生自System.Web.UI命名空间中的System.Web.UI.Control基类,无论是HTML服务器控件、Web服务器控件,还是用户自定义控件,都是从System.Web.UI.Control继承而来的,如图2-1所示。

其中,System.Web.UI.WebControls包含了Web服务器控件,System.Web.UI.HtmlControls包含了HTML服务器控件,System.Web.UI.Page是所有ASP.NET Web页面(.aspx文件)的基类,System.Web.UI.UserControl是所有ASP.NET Web用户控件(.ascx文件)的基类,System.Web.UI.Page和System.Web.UI.UserControl不能同时被继承。表2-1与表2-2描述了Control类的常用属性与方法。

figure_0083_0056

figure_0084_0057

figure_0084_0058

图 2-1 ASP.NET服务器控件的类层次结构

figure_0084_0059