4.3 Web服务器控件
HTML控件在过去的页面开发中基本可以满足用户的需求,但是并没有办法利用程序直接来控制它们的属性、方法和事件。而在交互性要求比较高的动态页面(需要同用户交互的页面)中需要使用到ASP.NET 4.5提供的Web服务器控件。这些Web控件提供了丰富的功能。在熟悉了这些控件后,开发人员就可以将主要精力放在程序的逻辑业务的开发上。
大多数的Web服务器控件都派生于System.Web.UI.WebControl,而WebControl类又从System.Web.UI.Control类派生,都包含在System.Web.UI.WebControls命名空间下面。
如图4-2展示了Web服务器控件类结构。在ASP.NET中,所有的控件都是基于对象Object的,而所有的Web控件则包含在System.Web.UI.WebControls下面。
图4-2 Web服务器控件类的结构图
在System.Web.UI.WebControls的命名空间下面,服务器控件可分为两大部分。
● Web控件:这种控件用来组成与用户进行交互的页面,比如最常见的用户提交表单。这类控件包括最常用的按钮控件、文本框控件、标签控件等,还有用户验证用户输入的控件,以及自定义的用户控件等,使用这些控件可以组成与用户交互的接口。
● 数据绑定控件:在Web应用程序中,往往需要在页面中呈现一些来自于数据库、XML文件等的数据信息。这时就要用到数据绑定控件来实现数据的绑定和显示。这类控件包括广告控件、表格控件等,还有用于导航的菜单控件和树型控件。
4.3.1 Web服务器控件基本属性
Web服务器控件继承了WebControl和System.Web.UI.Control类的所有属性,包括了控件的外观、行为、布局和可访问性等方面。
1.外观属性
ASP.NET服务器控件的外观属性主要包括前景色、背景色、边框和字体等,这些属性一般在设计时设置,如有必要,也可以在运行时动态设置。
(1)BackColor和ForeColor属性
● BackColor属性:用于设置对象的背景色,其属性的设定值为颜色名称或是“#RRGGBB”的格式。
● ForeColor属性:用于设置对象的前景色,其属性的设定值和BackColor的要求一样,为颜色名称或是“#RRGGBB”的格式。
例如,下面为设置按钮控件Button1颜色属性的代码:
上面打代码中第1行和第2行利用ARGB值设置控件Button1的背景色,第3行使用颜色枚举值设置控件Button1的背景色,第4行使用HTML颜色名创建颜色来设置控件Button1的背景色。
(2)Border属性
Border边框属性包括BorderWidth、BorderColor、BorderStyle。其中,BorderWidth属性可以用来设定Web控件的边框宽度,单位是像素。下面的代码把Button控件的边框宽度设置为5。
BorderColor属性用于设定边框的颜色,其属性的设定值为颜色名称或是“#RRGGBB”的格式。
BorderStyle属性用来设定对象边框的样式,总共有以下几种设定。
● Notset:默认值。
● None:没有边框。
● Dotted:边框为虚线,点较小。
● Dashed:边框为虚线,点较大。
● Solid:边框为实线。
● Double:边框为实线,但厚度是Solid的两倍。
● Groove:在对象四周出现3D凹陷式的边框。
● Ridge:在对象四周出现3D突起式的边框。
● Inset:控件呈陷入状。
● Outset:控件呈突起状。
(3)Font属性
Font属性有以下几个子属性,分别表现为不同的字体特性。
● Font-Bold:如果属性值设定为True,则会变成粗体显示。
● Font-Italic:如果属性值设定为True,则会变成斜体显示。
● Font-Names:设置字体的名字。
● Font-Size:设置字体大小,共有9种大小可供选择,包括Smaller、Larger、XX-Small、X-Small、Small、Medium、Large、X-Large或者XX-Large。
● Font-Strikeout:如果属性值设定为True,则文字中间显示一条删除线。
● Font-Underline:如果属性值设定为True,则文字下面显示一条底线。
例如,设置按钮Label1控件的字体属性代码如下:
上面的代码中第1行设置按钮控件Label1上文字的字体为Verdana。第2行设置字体为加粗。第三行设置字体的相对大小。第4行设置字体的实际大小为12px。
2.行为属性
Web服务器控件的行为属性涵盖了控件是否可见、控件是否可用,包括控件的提示信息等。除了控件的提示信息之外,其余的控件行为属性一般会在运行时进行动态设置。
(1)Enabled属性
Enabled属性用于设置禁止控件还是使用控件。当该属性值为False时,控件为禁止状态。当该属性值为True时控件为使用状态,对于有输入焦点的控件,用户可以对控件执行一定的操作,例如单击Button控件,在文本框中输入文字等。默认情况下,控件都是使用状态。
(2)ToolTip属性
ToolTip属性用于设置控件的提示信息。设置了该属性值后,当鼠标停留在Web控件上一小段时间后就会出现ToolTip属性中设置的文字。通常设置ToolTip属性为一些提示操作的文字。
(3)Visible属性
Visible属性决定了控件是否会被显示,如果属性值为True将显示该控件,否则将隐藏该控件(该控件存在,只是不可见),默认情况下,该属性为True。
3.可访问性
设计网页时,需要支持键盘中的快捷键和Tab键,这是为了方便用户使用键盘来访问网页,可访问性指的就是实现这些功能的特性。
(1)AccessKey属性
AccessKey属性用来为控件指定键盘的快捷键,这个属性的内容为数字或是英文字母。例如设置为A,那么使用时用户按下Alt+A组合键就会自动将焦点移动到这个控件的上面。
(2)TabIndex属性
TabIndex属性用来设置Tab按钮的顺序。当使用者按下Tab键时,输入焦点将从当前控件跳转到下一个可以获得焦点的控件,TabIndex键就是用于定义这种跳转顺序的。合理地使用TabIndex属性,可以让用户使用程序时更加轻松,让程序更加人性化。如果没有设置TabIndex属性,那么该属性值默认为零。如果Web控件的TabIndex属性值一样,就会以Web控件在ASP.NET网页中被配置的顺序来决定。
下面的代码设置了三个Button控件的TabIndex属性,由于A3的TabIndex值最小,所以当用户按下Tab键时,输入焦点首先停留在A3上,当再次按下Tab键后,焦点跳转到A2上,第三次按下Tab键时焦点将跳转到A1上。
以上代码第1行定义Button1的TabIndex属性为3,第2行定义Button 2的TableIndex属性为2,第3行定义Button3的TableIndex属性为1,程序运行时,用户可以通过Tab键在这三个控件之间切换,切换的顺序为Button3→Button2→Button1。
4.布局属性
Web服务器控件提供了Width和Hight属性来控制控件显示的大小,可以使用一个数值加一个度量单位设置这些属性,这些度量单位包括相素(pixels)、百分比等。在设置这些属性时,必须添加单位符号px(表示相素)或%(百分比)以指明使用的单位类型。
(1)Height属性
Height属性获取或设置Web服务器控件的高度。
(2)Width属性
Width属性获取或设置Web服务器控件的宽度。
例如:定义一个TextBox控件,并设置属性BorderWidth、Height和Width的值来定义TextBox控件的边框大小、高度和宽度,代码如下:
上面的代码设置了TextBox1控件的属性BorderWidth为4px,表示边框的宽度为4px,Height为70px,表示高度为70px;Width为150px,表示宽度为150px。
【实例4-1】设置控件的外观
本实例创建了9个Label控件,为每一个控件设置不同字体大小、颜色,要显示的文字,具体实现过程如下:
01 启动Visual Studio 2012,执行“文件”︱“新建网站”命令,在弹出的“新建网站”对话框中创建一个名为“实例4-1”的ASP.NET空网站。
02 用鼠标右键单击网站名称“实例4-1”,在弹出的快捷菜单中选择“添加”︱“添加新项”命令,在弹出的“添加新项”对话框中,添加一个名为Default的Web窗体。
03 单击网站目录下的Default.aspx文件,进入“视图编辑”界面,打开“设计视图”对话框,从工具箱中拖动9个Label控件到编辑区中。然后切换到“源视图”界面,在编辑区的<form></form>标记之间编写如下代码:
代码说明:第1行~第8行分别为7个标签控件Label设置了不同字体大小的属性Font-Size;设置控件不同的前景颜色属性ForeColor,同时指定要显示的文本。
04 按快捷键Ctrl+F5,运行程序,效果如图4-3所示,在这里可以看到7种各种不同的控件外观。
图4-3 运行结果
4.3.2 Web服务器控件的事件
在ASP.NET页面中,当用户单击一个按钮控件时,就会触发该按钮的单击事件,开发人员在该按钮的单击事件处理函数中编写相应的代码,服务器就会按照这些代码来对用户的单击行为做出响应,所以说,用户与服务器的交互是通过Web服务器控件的事件来完成的。
1.Web服务器控件的事件模型
Web服务器控件的事件工作方式与传统的HTML标记的客户端事件工作方式有所不同,这是因为HTML标记的客户端事件是在客户端引发和处理的,而ASP.NET页面中的Web服务器控件的事件是在客户端引发的,在服务器端处理。
Web服务器控件的事件模型:客户端捕捉到事件信息,然后通过HTTP POST将事件信息传输到服务器,而且页框架必须解释该POST以确定所发生的事件,然后在要处理该事件的服务器上调用代码中的相应方法。
基于以上的事件模型,Web服务器控件事件可能会影响到页面的性能,因此,Web服务器控件仅仅提供有限的一组事件,如表4-1所示。
表4-1 Web服务器控件事件
Web服务器控件通常不再支持经常发生的事件,如onmouseover事件等,因为这些事件如果在服务器端处理的话,就会浪费大量的资源。但Web服务器控件仍然可以为这些事件调用客户端处理程序。此外,控件和页面本身在每个处理步骤都会引发生命周期事件,如Init、Load和PreRender事件,在应用程序中可以利用这些生命周期事件。
所有的Web事件处理函数都包括两个参数:第一个参数表示引发事件的对象,第二个参数表示包含该事件特定信息的事件对象,通常是EventArgs类型,或EventArgs类型的继承类型。例如按钮的单击事件处理函数,代码如下:
以上的代码中第1行定义的函数包含两个参数:第一个参数Sender为引发事件的对象,这里引发该事件的对象就是一个Button对象;第二个参数e为EventArgs类型,该类型继承它表示该事件本身。
2.Web服务器控件事件的绑定
在处理Web服务器控件时,需要把事件绑定到事件处理程序。事件绑定到事件处理程序的方法有两种:
(1)在ASP.NET页面中声明控件时指定该控件的事件对应的事件处理程序,例如把一个Button控件的Click事件绑定到名为ButtonClick的方法,代码如下:
(2)如果控件是被动态创建的,则需要使用代码动态地绑定事件到方法,例如以下代码:
以上这段代码声明了一个按钮控件,并把名为ButtonClick的方法绑定到该控件的Click事件。其中,第1行定义了一个按钮控件btn,第3行为该控件添加了一个名为ButtonClick的单击事件处理程序。