日期:2009-11-09  浏览次数:20450 次

Web 控件

你可能会担心,象 <ASP:TextBox>这样的 控件 代表了一套需要你熟练运用的全新 控件 。不过,它们并不难学,因为它们在HTML中都有对应者。例如,对于一个很简单的文本框,在HTML 中,你是这样做的:

<input type=“text” value=“Your Name”></input>
而相应的Web 控件 是这样的:
<ASP:TextBox Text=“Your Name” runat=“server” />
在这两者中,你立刻就能注意到的是Web 控件 通过代码“ASP:”名称空间来识别,并且同在 XML 中一样,使用斜线来结束元素。你不是必须使用 XML 的格式,你也可以使用HTML格式,用一个分号来结束标记:</ASP:TextBox>。但是你会发现, XML 格式被用在许多代码举例中,并且代码字数也较简洁。名称空间必须要使用,它负责识别文本框TextBox 控件 来自哪里。所有的标准Web 控件 都是 ASP名称空间的一部分。当编写自己的 控件 时,这一点变得很重要。
TextBox 控件 相对于标准的输入框好象没有多少优势,但是你应该考虑一下面的三个输入 控件 :
<input type=“text” ...>
<input type=“password” ...>
<textarea rows=“5" ...>
它们都是用于HTML输入的,但是并没有一致性。但是如果使用下面的,是不是更简单一些呢?
<ASP:TextBox runat=“server” ...>
<ASP:TextBox TextBoxMode=“Password” ...>
<ASP:TextBox Rows=“5" ...>
你可以看到,一个简单 控件 包含了HTML中三个 控件 的功能,而且更易记忆、更易编码。
ASP.NET 携带了5大类 Web 控件 :
• 与HTML相对应的固有 控件
• 在页面上提供数据流的列表 控件
•提供更丰富的UI(用户界面)内容和功能的Rich 控件
• 完成各种表单验证的确认 控件
• 为 WAP设备封装WML的移动 控件
固有的 服务器 控件 与 HTML 控件 相同,但是更加合理了,可提供更为一致的用途。这些 控件 包括LinkButton(链接按钮)、ImageButton(图象按钮)、HyperLink(超级链接)、TextBox(文本框)、CheckBox(复选框)、RadioButton(单选框)、DropDownList(下拉列表)、ListBox(列表框)、Image(图象)、Label(标签)、Panel(面板)、Table(表格)、TableRow(表格行)、TableCell(表格单元)。
列表 控件 包括Repeater(转发器)、DataList(数据列表)和DataGrid(数据栅格)。列表 控件 还包括RadioButtonList(单选框列表)和 CheckBoxList(复选框列表),这样就使创建单选框和复选框的列表变得简单。
Rich 控件 包括Calendar(日历)和AdRotator(广告旋转)。Calendar 控件 为低级的浏览器输出纯HTML,为高级浏览器输出 DHTML (如 Internet Explorer 5.0)。AdRotator输出图象,它有内置的旋转代码。
确认 控件 包括RequiredFieldValidator(请求域确认)、 Compare Validator(比较确认)、RangeValidator(范围确认)、RegularExpressionValidator(规范表达确认)、CustomValidator(顾客确认)和ValidationSummary(确认摘要)。这些 控件 为开发人员在表单处理中建立确认提供了简单的途径。
有关移动 控件 的信息现在还没有发布,但是可以肯定它们有助于构造激活WAP的Web站点。

编写新的 控件

你并不一定只局限于使用这些系统提供的 控件 ,自己编写 控件 也相当简单。例如,如果想要一个 控件 来封装两个文本框(可能是名和姓的输入域),就可以这样来编写代码:
<ASP:Panel runat=“server”>
<ASP:Textbox id=“txtFirstName” text=“First Name” runat=“server” />
<ASP:Textbox id=“txtLastName” text=“Last Name” runat=“server” />
</ASP:Panel>
可以把这个代码保存在文件 Name.ASPc (注意这个新扩展名)中,并将其作为一个Web表单 控件 来对待。接着,就可以向 Web表单中增加以下内容:
<%@ Register TagName=“NameControl” TagPrefix=“Foo” Src=../../“Name.ASPc” %>
<form>
<foo:NameControl runat=“Server”/>
</form>
这样你就可以很容易地创建可以再利用的 控件 了。这真实很美好 ;-) 你还可以直接在Visual Basic或 C#中创建 控件 ,允许它们成为其它 控件 的子类,并且呈现任何它们所要求的输出。因为 控件 是用名称空间来识别的,因此在 控件 之间应该是没有冲突的。实际上, 控件 甚至可以使用同一个名字,只要它们在不同的名称空间中就行。你会感觉到,这使得 ASP.NET 非常具有扩展性,并且使编程环境变得越来越丰富。实际上有一个很大的提供丰富 控件 的第三方市场。

数据捆绑 控件

新的Web 控件 之一是数据栅格DataGrid,这是用于显示成套数据的内置支持 控件 。为了从SQL生成的数据中产生一个 HTML表格,你只需要创建 ADO+对象,并执行指令来获取数据以作为栅格的数据源,比如下面的表4代码:
表 4 DaveSGrid1.ASPx
<%@ Import Namespace=“System.Data.SQL” %>
<HTML>
<script language=“VB” runat=“server”>
Sub Page_Load(Sender As Object, E As EventArgs)
Dim myCommand As SQLCommand
myCommand = New SQLCommand(Òselect * from products”,
ÒServer=localhost; Database=AdvWorks; UID=sa”)
DataGrid1.DataSource = myCommand.Execute
DataGrid1.DataBind
End Sub
</script>
<body>
<ASP:DataGrid id=“DataGrid1" runat=“server” />
</body>
</HTML>
所需要做的就是将数据捆绑到数据栅格,然后就生成了一个整洁的HTML表格:


数据捆绑并不局限于来自 数据库 的数据,你还可以捆绑到hash表格、数组、其它 服务器 控件 、页面的适当层,几乎什么都可以。如果默认的栏目不合适,还可以对其进行定制,让其显示你所感兴趣的部分:
<ASP:DataGrid id=“DataGrid1"
AutoGenerateColumns=“false” runat=“server”>
<property name=“Columns”>
<ASP:BoundColumn HeaderText=“ Name” DataField=“ProductName”/>
<ASP:BoundColumn HeaderText=“Description”
DataField=“ProductDescription”/>
</property>
</ASP:DataGrid>
使用 BoundColumn 控件 选择一个简单的栏目,并