您的位置:首页 > 编程语言 > ASP

Programming Microsoft® ASP.NET英文版翻译

2007-06-19 15:39 134 查看
第三章:ASP页面核心服务控件概要

ASP.NET页面是由代码、标签、文本以及服务控件构成的。服务控件基于请求产生恰当的置标语言。服务控件随着所有的控制运行以及在浏览器中为用户显示页面。

ASP.NET页面丰富的程序设计来源于服务控件类覆盖了基本的HTML交互基本任务。例如:通过输入标签收集文本信息,也有像坐标网格数据显示的更先进功能。在ASP.NET领域里,更先进的和更专业的控件确保了所有基本任务和普通功能的实现。Adrotator和Calendar控件就是两个很好的例子。

ASP.NET控件程序设计的关键是RUNAT属性。如果一个控件的没有声明RUNAT属性,会被认为是简单的文本以及逐字输出。如果控件包含了RUNAT属性设置并且被设置为SERVER,ASP.NET创建并处理当控件在服务器上运行页面的实例。所有这些都作为ASP.NET运行构架的一部分很清楚的显示在用户和程序设计人员面前。

在第一章,我们把服务器控件识为主要分为HTML服务器控件与WEB服务器控件。在ASP.NET,这些控件也是分别代表的是HTML控件与WEB控件。HTML控件对照图HTML标记,并通过服务器端组件的编程接口标准来设置属性给相应的HTML标签。Web控件,反过来是一个较抽象的库控件中加入HTML语法。由于Web和HTML控件,都有一个最大的共同了功能,尽管有少数例外,我们可以说Web控件,其功能而言,就是HTML控件的一个扩展。Web控件有丰富的开发环境的特点与较大的一整套方法,性能和事件。

正如我们将在页面后看到更详细的,第二个和更周到看到服器控件在ASP.NET揭示存在着两个家庭更多的特点。在现实世界的ASP.NET应用,您最终使用至少从以下控件类别:HTML的控件,Web控件,验证控件,数据绑定控件,用户控件,移动控件,用户自定义控件。验证控件是一个WEB控件下的一个特殊控件和值得很好地对待一个单独的部件。数据绑定控件不是一类简单的控件,它的特点,使他们不同于HTML控件或Web控件。数据绑定控件,是指它控制的能力,能够连接到某些特定的数据源。因此,数据绑定控件不是前面所提到的任何服器控件,但它是很有用的部件,因为其重要性,并频繁使用。用户控件也被称为pagelets相对陈旧文本-是Web控件和HTML控件可视化的集合,单独的呈现出来可编程的外部控件。移动控件都是用来当创建用在移动设备上Web应用程序。自定义控件是指服务器控件是由你继承一个基类控件创造。

在这一章中,我们将覆盖HTML的控件、Web控件、验证控件、和数据绑定控件。我们将覆盖第10章用户控件,第11章移动控件,和第18章自定义控件中至第20章。

ASP.NET服务器控件的一般特性

所有ASP.NET的服务器控件,包括HTML和Web控件以及由你创建或下载任何自定义控件,以及从控件类的继承。该类定义在名字空间System.Web.UI,而且正如我们第2章所讨论的,也代表所有ASP.NET页的基础。控件类的声明如下:

publicclassControl:IComponent,IDisposable,IParserAccessor,

IDataBindingsAccessor

IComponent的接口定义的方法,控制界面与其他组件运行在公共语言运行库(clr),然而IDisposable实行共同模式释放不受限制的资源。IParserAccessor接口,使控件工作就如儿童控制的集装箱。最后,IDataBindingsAccessor接口,使控制能力支持数据绑定能力表现在设计时间。IDataBindingsAccessor的接口定义了只读集合-DataBindings特性,即包含所有的可控制数据绑定的可快速开应用程序开发(RAD)设计者,诸如微软VisualStudio.Net工具。数据绑定的收集只存在于设计时间,因此,如果你是一个快速开发人员,这控件将会带来许多的好处。(设计时间特点在第21章将有进一步的讨论)。

控件类的特性

控件类的特性就是没有用户界面的特点。它其实是一个服务器控件的一个表现形式。控件类的特性见表3-1。

表3-1:服务器控件的特性

特性

描述

ClientID

获取在HTML页中分配给控件的ID。它是一种略微不同版本与UniqueID特性。UniqueID包含冒号(:),但这个符号在ClientID中与替换成下划线(_)是不允许的。

Controls

获取一个填充集合或引用一子控件。

EnableViewState

设置或返回一个布尔值,以确定在当前网页请求结束后该控件是否保持自己的和它的子控件的viewstate。

ID

设置或返回为控件定义的标识符

NamingContainer

返回一个命名容器的引用。一个命名容器的名字空间控件的属性。如果控件不定义自己的命名空间,将返回上一页引用它的父控件

Page

返回一个对包含该控件的Page对象的引用

Parent

返回一个该控件在页面层次中的父控件的引用

TemplateSourceDirectory

返回虚拟目录的主页

UniqueID

返回控件在页面层次中的ID

Visible

设置或返回是否呈现该ASP.NET的控件

控件类是新控件的理想的基类,它没有用户界面,没有要求的风格信息。

HTML控件

在ASP,HTML标记插入布局的服务器页面被视为不透明的文本,逐字输出到客户端。此行为已完全保持在ASP.NET。一个很大的差别,那就是在ASP.NET中,只需简单的添加runat属性的值为"Server",你可以把死的HTML文本变活。一旦转化成一种活的实例,例如一个服务器端组件,原标签可配置编程采用面向对象的方法。按设计,HTML格式控制揭露一套方法和性能,认真反映HTML语法。例如,要设置默认的文本输入形式,你用一个属性名的值,情况并不重要,在C#中,而不是在以Microsoft VisualBasic.Net代替更多的表现文本。这个名称决定了服务器控件的值与ID属性。下面的代码片断显示如何定义一个服务器端输入标签名字lastName:

<input runat="server" id="lastName" type="text"/>

标签声明不包括一个明确的值和静态值的Value属性,可设定程序如下:

Void Page_Load(object sender,EventArgs e)

{

lastName。Value="Esposito";

}

经过处理在ASP.NET中运行,在此之前声明产生下列HTML代码:

<input name="myName" id="myName" type="text" value="Esposito"/>

通常说服务器端的ID属性扩展到一对HTML属性name及id。要知道,这种情况对浏览器的兼容性。绝非这是否意味着在服务器上的name与id,可以互换使用的名字服务器实例。名称的服务器控件为例依赖于ID。如果您注明name和ID于服务器端的标签,值分配到的name。

HTML控件的一般特性

提供了预定义方法来充当操作HTML元素的一般用法,这些元素有<form>,<input>和<select>,也包括其他元素如表格、图片和超链接。所有的这些预定义HTML服务器控件都继承于同一个基类:HtmlControl类。另外,每一种操作都同时会提供它自己特有的属性和事件集。

控件给出了典型的属性是允许你从服务器端代码中有规则地使用HTML的属性。HTML控件很好地与数据绑定相结合起来并且与ASP.NET有一致的规则,并且也完全支持触发事件和客户端脚本。例如:对一个可点击按钮来说,你可以编写一个JavaScript脚本代码在客户端来响应它的单击事件同样也可以在服务器上编写事件的处理代码,还可以将事件的处理事件结果返回给页面。

HTML控件已定义在名字空间System.Web.UI.HtmlControls。如前所述,在.NET框架中大多数HTML标识都有一个直接对口类,但不是全部都可用。不对定制类进行映射的HTML元素是通过HtmlGenericControl类的返回值和有使用通用集来设置其属性的,而不是直接对其属性进行设置。通用控件元素包括:<div>,<iframe>,<span>,<hr>,<font>,和<body>。通常地,你应该记住,可以出现在HTML页面上的每一个元素在服务器可以被标记为runat="server"或在服务器端编辑。

HtmlControl的基类

HtmlControl类是从Control类继承而来的,它定义了一些方法、属性和事件共同对所有的HTML进行控制。实际上,大部分属性和所有的方法及事件都是简单的从基类继承。表3-4为具体的HTML控件属性的清单:

表3-4:一种HTML控件的特殊属性

属性

描述

Attributes

返回所有属性集的一个集合对象

Disabled

设置或返回一个布尔值,以确定该控件是否已被禁用

Style

返回一个由所有适用于该控件的CSS(层叠样式表)样式属性组成的集合

TagName

返回控件后HTML标签的名称

一个不可用的HTML服务控件是不可见的但它始终可作为HTML代码生成。如果一个“Disabled”属性被设置为“true”,则这个不可用的HTML属性被再用于HTML中进行输出控制。如前所述,如果显示属性设置为false,HTML是不产生控件。

使用HTML的属性

每一个HTML控件特性要比表3-4中所列出来的更具有特色。HTML服务器控件图将HTML属性和被赋给他的值都复制到HTML的输出显示端。为了执行没有副本的HTML直接的操作,这个属性集常被用于在HTML标签的结果集中设置其属性。这样集合也可以根据接口设置没有指导图的属性,并且,如果需要的话还可以用于定义习惯用法的HTML属性。任意一个属性集的内容都是由一个字符串进行管理控制的。

根据下面这一小段HTML代码,我们来看看怎样<body>标签中编程设置一些属性:

<script>

Function Init(){

alert("Hello");

}

</script>

<script RUNAT=server language="C#">

Void Page_Load(object sender,EventArgs e)

{

theBody.Attributes["onload"]="Init()";

}

</script>

<html>

<body RUNAT="server" id="theBody">

</body>

</html>

你也可以绑定一个JavaScript脚本到一个<body>标签的onload属性上。具体的客户端显示的HTML代码如下:

<script>

functionInit(){

alert("Hello");

}

</script>

<html>

<body id="theBody" onload="Init()">

</body>

</html>

这些属性的值是通过一个被命名为AttributeCollection的特殊类进行交互的。这个类名字和内容是不可以用for…each语句来列举的因为没有被实现IEnumerable接口。这些内容被存放在一个StateBag对象中,这个对象常被用作ASP.NET视图的不可依次列出的状态。然而这些内部数据内容的可枚举性仍是可以被操作员调用的。这个AttributeCollection类提供特殊的方法来调用文本框对象并对添加和删除元素。有趣的是,如果你添加一个名为Style的属性的话,这个类会自动地更改Style集的值。

HTML控件的层次

HTML控件可以被分为两个主要类:存储和输入控件。可是,将一个控件归类为这两个主要类之一的话也不容易,例如一个HtmlImage控件,它是ASP.NET对应于<img>标签的一种控件。图3-1显示了HTML控件树形结构。



图3-1:所有HTML控件的分组图

从上图中可以看出,这些控件并不是根据任意的和可能可辩证的规则来分组的,而是简单地根据每一个控件的基类来分组的。这个HtmlImage控件形成了一级它自己的控件层,因为它直接继承于HTMLControl类而不是通过任意中间类来继承。

输入类包括所有可能从提交按钮到检查框和从文本域到单选按钮的<input>标签的变种类。容器类控件包含标记、表、表单,而在一般情况下,各HTML标记可能含有子元素。

HTML容器控件

容器控件的基类是HtmlContainerControl类,这个类是从HtmlControl类直接继承下来的。被这个标签定位的HTML元素是这种元素,它必须有一个结束标志,比如说表单、选择框、表,也包含标记和文本域。与HtmlControl类想比,一个容器控件类的特点在于它有两三个额外的属性——InnerHtml和InnerText。

这两个属性很巧妙地处理了在开始和结束标记之间读取的文字内容。要注意的是,如果这些内容是在服务器上进行控制的话,你将无法得到其中的内容。InnerHtml和InnerText类只对所有的文字内容有效。标签本身是不被认为是输出的。可是,与InnerText类不同的是,InnerHtml类可以让你使用大量的文本并且不对这些文本进行自动的编码或解码。换句话说,InnerText类检索和设置标签内容时是以纯文本的形式操作的,而InnerHtml类检索和设置同样内容时则是用的不同的格式。

表3-5列出了在ASP.NET1。1版本中HTML容器控件的定义。

表3-5:HTML容器控件



描述

HtmlAnchor

描述一个HTML锚—如,<a>标签

HtmlButton

描述HTML<button>标签。<button>元素是定义在HTML4。0IE4。0版本或后继版本得到支持

HtmlForm

代表的<form>标签,但只能在一个网页上作为一个容器的服器控件接口。服务器上不能真正被用来创建HTML表单可编程的

HtmlGenericControl

标签例如:<span>,<font>,<div>,<hr>,<link>,与<iframe>。你可对这个控件进行编程使用它们的属性集与设置这些属性集

HtmlSelect

代表标签<select>—HTML选择框。

HtmlTable

<table>表

HtmlTableCell

<td>单元格

HtmlTableRow

<tr>行

HtmlTextArea

代表标签<textarea>

值得注意的是,HtmlButton控件与HtmlInputButton控件是不同的,它描述的是一个<input>标签的按钮的改变。在后面部分讨论WEB控件的时候我们会知道更多的关于按钮用法。服务器端的形式发挥着很关键的作用,因为在实际的ASP.NET应用中,是采用保持现状地提交表单来维护的。因此,HtmlForm控件并不是简单地一种可在服务器上编程的元素形式。特别是HtmlForm隐藏了动作的属性并且不能被作为提交内容来提交给页面,这些内容不同于HTML响应给客户端的内容。我们将在第4章中详细介绍HTML表单。

URL导航

一个HtmlAnchor类是一种访问和配置<a>标签的可编程方法。谈到其它容器控件,HtmlAnchor类提供了一些额外属性,譬如HRef(连接地址)、Name(名字)、Target(显示目标)和Title(标题)。HRef属性是设置超链接的目标的,并且它可能常用于指定本地页面。Name属性是ASP.NET页面的一部分,它可以通过将HRef值设置为“#Name”在同一页面的任何地方进行跳转。下列代码是将书签标记命名为MoreInfo的示范:

<a name="MoreInfo"/>

这个标记可以通过使用下面的超链接来实现跳转:

<a href="#MoreInfo">GetMoreInfo</a>

Target属性用于确定将被加载的连接URL地址目标窗口或框架。常用的Target的值有:“_self”,“_top”,“_blank”,和“_parent”,也包括其他任意引用页框架的名字。尽管这些特点大部分由客户端决定的,但你仍可以给这些用小写字母为它命名。最后,Title属性包含了文本信息,当鼠标放在标记域内时,它会作为一个ToolTip来显示。

在服务器上处理事件

除了在不同页上进行操作之外,标记控件——也包括HtmlButton控件都通常都可以用作服务器的响应页面。这种操作的关键在于ServerClick事件,这些事件允许你在服务器上定义你要使用的方法的名字,用户触发这种操作时,事件就发生了。下面的代码演示了一个在客户端和服务器上一起执行的触发事件标记:

<a runat=server onclick="Run()" onserverclick="DoSomething">Click</a>

onclick属性指定了在客户端的事件被触发后调用JavaScript脚本语言编写的处理方法;onserverclick属性指定了页面提交后将运行的服务器端的代码。当然,如果所有的事件处理方法都被指定了,那么客户端的处理方法会在被提交之前执行。

HtmlSelect控件类

HtmlSelect控件类描述了一个你所选择的一个或多个操作的清单。你可以通过设置Size和Multiple属性来控制它的显示和动作。Size属性指定了可控制显示的行数,而Multiple属性则是指定此操作时是否可选择多个元素。在元素集中,内部元素是被分组了的,并且每一个元素都被一个ListItem对象声明。有趣的是,ListItem类并不是在HtmlControls这个命名空间中定义的而是在WebControls命名空间中才有。为每一个可选元素指定文本内容时,你既可以设置ListItem对象的Text属性也可以简单地在<select>元素的开始和结束标签之间定义一串<option>标签来指定内容。

HtmlSelect控件会默认地作为一个下拉列表显示出来。然而,如果可进行多项选择或者高度被设置可显示多行,则它会作为一个列表框进行显示。在一个单选操作时的选择元素索引通过SelectedIndex属性被返回。如果选择多个选项,你就可以通过元素集跳转并检查在单独的列表元素的Selected属性。

HtmlSelect控件支持通过附加属性来进行数据绑定。它的DataSource属性允许我们设置数据源,这个数据源是可以被。NET的ICollection接口对象使用的。数据数据源包含多种可绑定数据表(例如一个DataSet对象),通过使用DataMember属性你可以选择这个特定的数据表。最后要说的是,DataTextField和DataValueField属性常用于将表元素的Text和Value属性值绑定到数据源的字段中。
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: 
相关文章推荐