ASPNET服务器控件和客户端脚本

ASPNET服务器控件和客户端脚本(一) (转载) (2008-08-23 09:39:07)
http://www.wenhei.com/docment/1113194

ASP .NET服务器控件和客户端脚本
如前几章所述,ASP .NET是从Microsoft早期的Web技术Active Server Pages(称为ASP ,现在称为传统的ASP )演化而来的.这个模型与现在的ASP .NET完全不同.传统的ASP 使用解释性语言完成最终HTML文档的构建,之后把它发送到浏览器上.而ASP .NET使用编译语言完成这个任务.本章主要讨论在编译环境下根据对象建立Web页面的理念.
本章还将介绍如何在ASP .NET页面中使用一种特定类型的对象,即服务器控件,以及如何充分利用这个控件.并讨论一种特殊类型的服务器控件:HTML服务器控件.本章将会描述如何在ASP .NET页面中使用JavaScript改变服务器控件的操作.
本章的剩余部分讨论如何以可视化和编程方式使用和操纵服务器控件,以帮助创建ASP .NET页面.
4.1 ASP .NET服务器控件
过去,使用传统ASP 的一个难点是,必须根据所编写的服务器端代码对浏览器输出的所有HTML结果负全责.这看起来很理想,但有一个问题,因为每个浏览器都以略微不同的方式解释提供给它的HTML.
目前两个主流浏览器是Microsoft的Internet Explorer和Netscape Navigator.这意味着,开发人员不仅要确定输出HTML的浏览器类型,还要考虑对应用程序发出请求的浏览器版本.一些开发人员为了解决这个问题,创建了两个应用程序.当终端用户对应用程序发出请求时,代码就检查浏览器,确定发出请求的浏览器类型.接着,ASP 页面为IE用户把请求重新定向到一个路径上,为Netscape用户定向到另一个路径上.
请求可能来自同一个浏览器的许多不同版本,所以开发人员常常为用于浏览站点的最低版本开发应用程序.基本上,每个人都把最低版本作为目标.这个技术可确保 页面在大多数发出请求的浏览器上正确显示,但迫使开发人员虚拟其应用程序.如果应用程序总是为最低版本开发,开发人员就不能利用新浏览器版本提供的高级功 能.
ASP .NET服务器控件克服了这些障碍.在使用ASP .NET提供的服务器控件时,不在服务器端代码中指定要输出的HTML,而指定要在浏览器上看到的内容,让ASP .NET决定发送到浏览器上的输出.
在收到一个请求时,ASP .NET 会检查这个请求,确定发出该请求的浏览器类型,以及浏览器的版本,然后输出适合于该浏览器的HTML输出.这个过程通过用户代理从HTTP请求的标题中确 定要发送给浏览器的内容来完成.也就是说,可以为最好的浏览器建立应用程序,而不必担心功能是否会在发出请求给应用程序的浏览器上发挥作用.有了前面描述 的功能,这些控件就可以称为智能控件.
4.1.1 服务器控件的类型
ASP .NET提供了两种不同类型的服务器控件:HTML服务器控件和Web服务器控件.这两种类型的控件大不相同,在使用ASP .NET时,就会看出重点是Web服务器控件.这并不是说,HTML服务器控件没有用,它们提供了许多功能,其中一些功能Web服务器控件也没有.
那么,哪种控件比较好 答案完全取决于要获得的结果.HTML服务器控件会映射为特定的HTML元素.可以在ASP .NET页面上放置一个HtmlTable服务器控件,动态地处理元素.另一方面,Web服务器控件映射为ASP .NET页面上需要的特定功能.所以,控件可以使用或元素,这取决于发出请求的浏览器的功能.
表4-1总结了使用HTML服务器控件和Web服务器控件的场合.
表 4-1
控件类型
使用该控件类型的场合
HTML服务器控件
把传统的ASP 3.0 Web 页面转换为ASP .NET Web 页面时,且完成的速度要求比较高时使用.把HTML元素转换为HTML服务器控件,比把它们转换为Web服务器控件简单得多
比较喜欢HTML类型的编程模型时使用
希望显式地控制为浏览器生成的代码时使用
Web服务器控件
需要更丰富的功能集执行复杂的页面请求时使用
开发用许多浏览器类型查看的Web页面,且根据不同的类型需要不同的代码时使用
比较喜欢Visual Basic 类型的编程模型时使用,该编程模型使用控件和控件属性
当然,一些开发人员喜欢把一些控件与其他控件分开,将它们放在自己的类别下.例如,引用下述类型的控件:
列表控件:这些控件类型允许绑定数据,以达到某种显示目的.
Rich控件:像Calendar这样的控件,显示的内容和功能比其他控件丰富.
验证控件:这些控件与其他窗体控件交互,以验证它们包含的数据.
可移式控件:这些控件专用于输出到特定的设备上,例如移动对话,PDA等.
用户控件:它们不是真正的控件,而是页面模板,可以像使用ASP .NET页面上的一个控件那样使用它们.
定制控件:自己建立的控件,其使用方式与ASP .NET 2.0默认安装所提供的ASP .NET服务器控件相同.
在决定是使用HTML服务器控件还是Web服务器控件时,并没有什么硬性规则.可能一种控件类型使用得比较多,另一种控件类型使用得比较少,但一种控件类 型提供的某些功能在另一种控件类型中没有.如果要完成特定的任务,而当前使用的控件类型没有解决方法,就可以看看另一种控件类型,因为它很可能有解决方 法.还要注意,可以混合和匹配这些控件类型.在同一个页面或应用程序中完全可以同时使用HTML服务器控件和Web服务器控件.
4.1.2 用服务器控件建立页面
使用服务器控件构建ASP .NET页面有两种方式.可以使用专门为处理ASP .NET 2.0而设计的工具,该工具允许可视化地把控件拖放到设计界面上,操纵该控件的行为.也可以直接通过输入代码来处理服务器控件.
1. 在设计界面上使用服务器控件
Visual Studio 2005允许可视化地把控件拖放到设计界面上,可视化地创建ASP .NET页面.要获得这个可视化的设计选项,可以在查看ASP .NET页面时,单击IDE底部的Design选项卡.在这个视图中,还可以把光标放在希望控件出现的地方,再在Visual Studio的Toolbox窗口中双击需要的控件.与Visual Studio的以前版本不同,Visual Studio 2005在Design和Source选项卡之间切换时,完全没有触碰代码.
在页面的Design视图中,可以突出显示一个控件,该控件的属性就会显示在Properties窗口中.例如,在图4-1中,在设计面板上选择Button控件,其属性就显示在右下角的Properties窗口中.
图 4-1
在这个窗口中修改属性,就会改变突出显示的控件的外观或行为.所有的控件都继承了一个特定的基类(WebControl),所以还可以同时突出显示多个控件,一次改变这些控件的基本属性.在选择控件时,需要按住Ctrl键.
2. 编写服务器控件
还可以直接在Code页面上工作.许多开发人员都喜欢这么做,所以这是第一次创建ASP .NET页面时的默认方式.手工编写自己的ASP .NET页面似乎比把控件拖放到设计界面上慢一些,但它并不像我们想象得那么慢.在Visual Studio 2005中编写应用程序时会得到许多帮助.开始在Visual Studio中输入代码时,IntelliSense功能会帮助我们自动完成代码的输入.例如,图4-2显示了一个在输入代码时出现的IntelliSense下拉列表,其中包含可能的完整代码语句.
图 4-2
IntelliSense会列出当前处理的控件或代码的最常用属性或语句.工作时高效地使用IntelliSense,可以大大加快编码的速度.
与Design视图一样,页面的Source视图也允许把控件从Toolbox拖放到代码页面上.例如,把一个TextBox控件拖放到代码页面上,与把它拖放到设计界面上的效果相同:
也可以在Source视图中突出显示一个控件,或把光标放在该控件的代码语句上,Properties窗口就会显示该控件的属性.现在就可以直接应用Visual Studio的Properties窗口中的属性了,这些属性会动态添加到控件的代码中.
4.1.3 处理服务器控件的事件
如第1章所述,ASP .NET使用传统的Visual Basic事件模型比传统的ASP 更多.ASP .NET不是使用解释性的代码,而是为页面编写基于事件的结构.传统的ASP 使用解释性的模型―― 当服务器处理Web页面时,页面的代码会以线性方式逐行解释,而"事件"仅隐含在页面加载的过程中.也就是说,过程中早期触发的事件位于页面的顶部.
目前ASP .NET使用事件驱动的模型.项或编码任务只在特定事件发生时执行.ASP .NET编程模型中的常见事件是Page_Load,如程序清单4-1所示.
程序清单4-1 处理特定的页面事件
VB
Protected Sub Page_Load(ByVal sender As Object,ByVal e As System.EventArgs)
' Code actions here
End Sub
C#
protected void Page_Load(object sender,EventArgs e)
{
// Code actions here
}
不但可以处理整个页面,在页面事件的特定时刻处理它的属性和方法,还可以通过特定的控件事件处理页面上包含的服务器控件.例如,窗体上按钮的一个常见事件是Button_Click,如程序清单4-2所示.
程序清单4-2 处理按钮单击事件
VB
Protected Sub Button1_Click(ByVal sender As Object,ByVal e As System.EventArgs)
' Code actions here
End Sub
C#
protected void Button1_Click(object sender,EventArgs e)
{
// Code actions here
}
程序清单4-2中的事件仅在终端用户单击了窗体上的按钮时才触发,该窗体具有Button1_Click的OnClick属性值.所以事件处理程序不仅存在于ASP .NET页面的服务器端代码上,还使用相关的ASP .NET页面标记中的服务器控件的OnClick属性关联起来,如下面的代码所示:
如何触发服务器控件的这些事件 有两种方式.第一种方式是在Design视图中打开ASP .NET页面,双击要创建服务器端事件的控件.例如,双击Design视图中的Button服务器控件,无论代码是在后台编码文件中,还是内置代码,都会在服务器端代码中创建Button1_Click事件的结构.这会为该服务器控件最常用的事件创建一个处理程序框架.
如前所述,注意Button控件有非常多的事件,双击该控件并不能得到这些事件.为了访问这些事件,应打开包含服务器端代码的页面,从IDE顶部的第一个 下拉列表中选择该控件,再在第二个下拉列表中选择该控件需要的事件.图4-3显示了事件下拉列表.例如,处理Button控件的PreRender事件, 而不是其Click事件.该事件的处理程序会放在服务器端代码中.
图 4-3
第二种方式是在Visual Studio的Properties窗口中为服务器控件创建服务器端的事件.这种方式只能用于页面的Design视图.在Design视图中,突出显示要 处理的服务器控件,该控件的属性和一个图标菜单就会出现在Properties窗口中.其中一个图标是事件图标,用一个闪电图形表示,如图4-4所示.
图 4-4
单击事件图标会打开该控件的可用事件列表.双击其中一个事件,就会在服务器端代码中创建该事件的结构.
有了事件的结构后,就可以编写触发事件时希望发生的特定操作了.
4.2 给服务器控件应用样式
我们常常希望改变应用程序中实现的服务器控件的默认样式(它们基本上没有样式).希望所建立的应用程序应反映自己的外观和操作方式.改变定制页面的控件外观的一种方法是更改其控件的属性.
如本章前面所述,要获得特定控件的属性,只需在Visual Studio中,在页面的Design视图中突出显示该控件.如果位于Source视图上,把光标放在控件的代码上即可.Properties窗口中显示的属性允许控制所选控件的外观和行为.
4.2.1 控件的常见属性
ASP .NET 2.0附带的许多默认服务器控件都派生于WebControl类,拥有公共属性,可以改变它们的外观和行为.并不是所有的派生控件都可以使用所有的可用属 性(尽管许多控件都拥有这些属性).另一个要点是并不是所有的服务器控件都是在WebControl类中实现的.例 如,Literal,PlaceHolder,Repeater和XML服务器控件就没有派生于WebControl基类,而是派生于Control类.
HTML服务器控件也没有派生于WebControl基类,因为它们主要用于设置HTML元素的属性.表4-2列出了服务器控件都有的公共属性.
表 4-2
属 性
说 明
AccessKey
允许赋予与Alt键相关的一个字符,这样终端用户就可以使用键盘上的快捷键激活控件了.例如,给Button 控件的AccessKey属性赋予K.这样,终端用户就不需要单击ASP .NET页面上的按钮(使用鼠标控制的指针),而可以按下Alt+K
Attributes
允许为Web服务器控件定义公共属性未定义的额外属性
BackColor
控制ASP .NET页面上控件的背景色
BorderColor
给服务器控件的边框设置颜色
BorderWidth
给组成控件边框的线设置线宽值.把一个数字设置为该值,就是把该数字设置为边框的宽度像素值.如果BorderColor属性没有与BorderWidth属性设置一起使用,默认的边框颜色就是黑色
BorderStyle
允许指定服务器控件边框的设计样式.边框默认创建为直线,但可以给边框使用许多不同的样式.BorderStyle属性的其他值有Dotted,Dashed,Solid,Double,Groove,Ridge,Inset和Outset
CssClass
给控件指定定制的层叠样式表(Cascading Style Sheet,CSS)类文件
Enabled
把这个属性的值设置为False,就关闭了控件的功能.Enabled属性默认设置为True
(续表)
属 性
说 明
EnableTheming
允许为所选的服务器控件打开主题功能.其默认值是True.这是.NET Framework 2.0中的一个新属性
Font
设置控件中所有文本的字体
ForeColor
设置控件中所有文本的颜色
Height
设置控件的高度
SkinID
给控件应用主题时设置要使用的skin.这是.NET Framework 2.0中的一个新属性
Style
允许把CSS样式应用于控件
TabIndex
设置控件在ASP .NET 页面中的tab位置.这个属性与页面上的其他控件一起使用
ToolTip
设置当鼠标停留在控件上一小段时间时,出现在浏览器的一个黄色框中的文本,它可以用于提供更多的指示给终端用户
Width
设置控件的宽度
许多服务器控件都有这些公共属性.在.NET Framework 2.0中,WebControl类的新属性有EnableTheming和SkinID.这些属性详见第9章.一些控件还有其他特定的属性.掌握上表列出的属性有助于快速理解Web服务器控件,并根据需要修改它们.
下面介绍定制服务器控件的外观和行为的其他方法.

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值