概述
Active Server Pages+ (ASP+) 框架,也称为 Web 窗体,可用来创建可编程的网页,以便将它们作为总体 Web 应用程序的组成部分。Web 窗体在以下方面简化了 Web 应用程序的开发:
在服务器上提供了基于事件的编程模式,这类似于像 Microsoft Visual Basic® 开发系统这样的基于 Microsoft® Win32® 的开发工具中所使用的、基于表单的开发模式。
允许 HTML 标记与应用程序逻辑的完全分离。逻辑,即页面后的代码,是经过编译的,因而其性能得到了大大提高。此外,您可以使用任何一种 Microsoft® .NET 语言来编写代码,从而使您能更充分地发挥现有的技能。
实现了丰富的设计时体验。Visual Studio® .NET 为创建和管理 Web 窗体提供了快速应用程序开发(RAD)功能。
支持种类丰富、功能强大的控件和 .NET 组件组,提供了统一的、对类型安全的对象模型。此外,该框架还通过定制组件或第三方组件使自身自然适应扩展性的需要。
本文将重点说明已实现为该框架的组成部分的服务器控件。ASP+ 的其它方面,如缓存、安全、配置和定制,也同样重要。对这些问题的详细说明,可以在 .NET SDK 文档的“开发人员指南”一节中找到。
服务器控件用于创建您的 Web 应用程序的用户界面。它们可以生成适用于目标设备或浏览器的任何输出。在 ASP+ 框架中有两组服务器控件:“HTML 控件”和“Web 控件”,这两组控件都能提供用于 Web 浏览器的 HTML。除了提供 HTML 之外,它们还封装有在往返行程中保留状态以及为各种客户机事件产生服务器端事件的机制。同时,它们还能用作复合控件的组成部分。
下面的各节内容将详细说明这两组控件。
HTML 控件
ASP+ 框架中的第一组控件称为 HTML 控件。这些控件位于 System.Web.UI.HtmlControls 命名空间中,是从 HtmlControl 基类中直接或间接派生出来的。图 1 说明了 HTML 控件的类层次结构。
图 1. ASP+ HTML 控件
对于任何包含 runat="server" 属性的标记,都会为其生成 HTML 控件的实例。例如,下面的 HTML 可创建一个名为“textBox1”的 HtmlInputText 控件的实例:
<input type="text" runat="server" id="textBox1" value="some text">
下表中列出了 HTML 控件以及对应的 HTML 标记。
表 1. HTML 控件标记
控件
对应的标记
HtmlAnchor
<a>
HtmlButton
<button>
HtmlSelect
<select>
HtmlTextArea
<textarea>
HtmlInputButton
<input type="button">
HtmlInputCheckBox
<input type="check">
HtmlInputRadioButton
<input type="radio">
HtmlInputText
<input type="text"> 和 <input type="password">
HtmlInputHidden
<input type="hidden">
HtmlInputImage
<input type="image">
HtmlInputFile
<input type="file">
HtmlForm
<form>
HtmlImage
<img>
HtmlTable
<table>
HtmlTableRow
<tr>
HtmlTableCell
<td>
HtmlGenericControl
任何其它没有对应控件的标记,如 <span>、<div> 等。
因为 HTML 控件与 HTML 标记直接对应,所以在将现有的 ASP 页面移植到 ASP+ 上时,它们将会大显身手。本文稍后的部分将对这些控件以及与它们对应的 Web 控件进行比较。
Web 控件
ASP+ 框架中的第二组服务器控件称为 Web 控件。这些控件位于 System.Web.UI.WebControls 命名空间中,是从 WebControl 基类中直接或间接派生出来的。图 2 说明了 Web 控件的类层次结构。
图 2. ASP+ Web 控件
Web 控件中包括传统的表单控件,如 TextBox 和 Button ,以及其它更高抽象级别的控件,如 Calendar 和 DataGrid 控件。它们提供了一些能够简化开发工作的特性,其中包括:
丰富而一致的对象模型:WebControl 基类实现了对所有控件通用的大量属性,这些属性包括 ForeColor、BackColor、Font、Enabled 等。属性和方法的名称是经过精心挑选的,以提高在整个框架和该组控件中的一致性。通过这些组件实现的具有明确类型的对象模型将有助于减少编程错误。
对浏览器的自动检测:Web 控件能够自动检测客户机浏览器的功能,并相应地调整它们所提交的 HTML,从而充分发挥浏览器的功能。
数据绑定:在 Web 窗体页面中,可以对控件的任何属性进行数据绑定。此外,还有几种 Web 控件可以用来提交数据源的内容。
在 HTML 标记中,Web 控件会表示为具有命名空间的标记,即带有前缀的标记。前缀用于将标记映射到运行时组件的命名空间。标记的其余部分是运行时类自身的名称。与 HTML 控件相似,这些标记也必须包含 runat="server" 属性。下面是一个声明的示例:
<asp:TextBox id="textBox1" runat="server" Text="[Entry Keywords]"></asp:TextBox>
在上例中,“asp”是标记前缀,会映射到 System.Web.UI.WebControls 命名空间。
||||||本节的其余部分将介绍已在 PDC 和 Beta 1 发行版中实现的 Web 控件。每个控件都带有简要的说明、声明示例和它在浏览器中的显示效果示例。按功能对这些控件进行了分类。
文本显示
Label 控件用于在页面中显示只读的静态文本或数据绑定的文本:
<asp:Label runat="server" Text="Label1" Font-Italic="true"></asp:Label>
输入控件
Web 控件组中包含的一些控件,允许最终用户输入将由服务器上的页面处理的数据。
TextBox 控件用于提供文本编辑能力。与 Label 控件相似,这里的文本也可以是数据绑定的。TextBox 控件支持多种模式,可以用来实现单行输入、多行输入和密码输入:
<asp:TextBox runat="server" Text="TextBox1"></asp:TextBox>
<asp:TextBox runat="server" Mode="Multiline" Rows="3">
TextBox1
</asp:TextBox>
<asp:TextBox runat="server" Mode="Password"></asp:TextBox>
CheckBox 控件用于生成能够在选中和清除这两种状态间切换的复选框:
<asp:CheckBox runat="server" Text="CheckBox1" Checked="True"></asp:CheckBox>
RadioButton 控件与 CheckBox 控件相似,但使用时通常会与其它 RadioButton 控件组成一组,以提供一组互斥的选项:
<asp:RadioButton runat="server" Text="RadioButton1" GroupName="Group1" Checked="true">
</asp:RadioButton>
<asp:RadioButton runat="server" Text="RadioButton2" GroupName="Group1"></asp:RadioButton>
选择
下面的四个控件提供了允许用户从展示给他们的选项中进行选择的机制。选项列表的内容既可像下面的示例中那样是静态定义的,也可以使用数据源来动态填充。
DropDownList 控件提供了将选项显示为下拉式列表,并从中进行单项选择的能力:
<asp:DropDownList runat="server">
<asp:ListItem Text="Choice1" Value="1" selected="true"/>
<asp:ListItem Text="Choice2" Value="2"/>
</asp:DropDownList>
ListBox 控件能够以可滚动列表的形式显示选项,并允许从中选择单个或多个选项:
<asp:ListBox runat="server" SelectionMode="Multiple">
<asp:ListItem Text="Choice1" Value="1" selected="true"/>
<asp:ListItem Text="Choice2" Value="2"/>
</asp:ListBox>
CheckBoxList 控件用于创建一组显示为一列或多列的 Checkbox 控件:
<asp:CheckBoxList runat="server">
<asp:ListItem Text="Choice1" Value="1" selected="true"/>
<asp:ListItem Text="Choice2" Value="2" selected="true"/>
</asp:CheckBoxList >
RadioButtonList 控件与 CheckBoxList 控件非常相似。不同之处在于,它使用的是一组 RadioButton 控件以创建一组互斥的选项:
<asp:RadioButtonList runat="server">
<asp:ListItem Text="Choice1" Value="1" selected="true"/>
<asp:ListItem Text="Choice2" Value="2"/>
</asp:RadioButtonList >
表单提交和回传
下列控件用于将带有用户输入值的页面提交给服务器,以便用页面中的代码对这些值进行处理。这些控件会在服务器上产生一个 Click 事件,供您在代码中使用。
Button 控件可以生成一个能够将页面再提交给服务器的三维按钮:
<asp:Button runat="server" Text="Click Me"></asp:Button>
LinkButton 控件的行为与 Button 控件相同。但它在页面上会显示为一个超级链接:
<asp:LinkButton runat="server" Text="Click Me"></asp:Button>
ImageButton 控件也用于提交页面。它会显示为一幅图像,并且能够提供用户单击位置的 x 坐标和 y 坐标:
<asp:ImageButton runat="server" ImageUrl="net.gif"></asp:Button>
导航
HyperLink 控件用于生成能够跳转到其它 URL 的链接:
<asp:HyperLink runat="server" Text="Follow Me" NavigateUrl="MyPage.aspx"></asp:HyperLink>
图像显示
Image 控件能够在页面上显示图像:
<asp:Image runat="server" ImageUrl="net.gif"></asp:Image>
版面控件
Panel 控件常用作简单的组合控件以及动态创建的控件的容器。(请注意,Panel 控件通常不具有可见的外观。)
<asp:Panel runat="server"></asp:Panel>
Table 控件与相关的 TableRow 和 TableCell 控件相结合,可以用来以编程的方法创建表或表式版面布局:
<asp:Table runat="server" GridLines="Both" BorderWidth="1px">
<asp:TableRow>
<asp:TableCell>[0,0]</asp:TableCell>
<asp:TableCell>[0,1]</asp:TableCell>
</asp:TableRow>
<asp:TableRow>
<asp:TableCell>[1,0]</asp:TableCell>
<asp:TableCell>[1,1]</asp:TableCell>
</asp:TableRow>
</asp:Table>
日期选择
Calendar 控件能够让用户浏览日期并进行日期选择(包括选择日期范围):
<asp:Calendar runat=server DayNameFormat="FirstLetter" ...>
<property name=SelectedDayStyle>
<asp:TableItemStyle Font-Bold="True" BackColor="#CCCCFF"/>
</property>
...
</asp:Calendar>
||||||列表绑定控件
列表绑定控件用于显示与其相关联的数据源或列表的内容。它们提供了创建多种自定义及标准版式的能力。本文结尾处的“有关的参考资料”一节中列出的一些文章将详细说明这些控件。
Repeater 控件是一个简单的列表绑定控件,它使用模板(即用于设定版式的 HTML 代码片断)来以一种“朴实无华”的,即没有预定义外观的方式显示数据源的内容:
<asp:Repeater runat="server">
<template name="HeaderTemplate">
<ol>