版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
1、AJAX第39章ASP.NET Web应用程序编程是一个不断变化和改进的主题。前面两章介绍了如何使用ASP.NET创建功能全面的Web应用程序,读者可能以为,前面已经探讨了创建自己的Web应用程序所需要的所有工具。但是,如果花点时间查看当前的网站,就会注意到,最近的网站在使用方面比老网站好得多。许多目前最好的网站都提供了丰富的用户界面,其响应能力与Windows应用程序差不多。它们是使用客户端处理技术实现的,主要是Ja阂vaScript代码和一阂种新技术Ajax。出现这阂个变化,是因为客户用于浏阂览网站的浏览器和客户用于阂运行浏览器的计算机更强大阂了。Web浏览器的当前版阂本,例如Intern
2、et褐Explorer 7和持Firefox,也支持各持种标准。这些标准,包括J持avaScript,使W持eb应用程序提供的功能比持使用普通的HTML提供的持功能强大得多。前面的章节持介绍了一些这方面的功能,持例如使用层叠样式表(CS持S)设置Web应用程序的持样式。本章介绍的Ajax钧并不是一个新技术,它只是钧一个标准的合并,以识别当钧前Web浏览器的丰富的潜钧在功能。在支持Ajax的钧Web应用程序中,最重要钧的特性是Web浏览器能在钧操作的外部与Web服务器就通信。这称为异步回送或部赐分页面的回送。实际上,这赐意味着用户可以与服务器端赐的功能和数据交互,而无需赐更新整个页面。例如,单击
3、赐一个链接,移动到表的第二赐页数据上时,Ajax可以赐只刷新表的内容,而不刷新赐整个Web页面。也就是说赐,需要的Internet赐通信量较少,从而使Web赐应用程序的响应比较快。本父章的后面将介绍这个例子,父还会举许多例子来说明Aj父ax在Web应用程序中的父巨大作用。本章将在代码中父使用Ajax的Micro父soft实现方式,它称为父ASP.NET AJAX父。这个实现方式采用了Aj父ax模型,将它应用于AS给P.NET架构。ASP.硒NET AJAX提供了许硒多服务器控件和客户端技术硒,它们专用于ASP.NE硒T开发人员,可以毫不费力硒地在Web应用程序中添加硒Ajax功能。本章的内容硒
4、如下: 首先学习Aj位ax和实现Ajax的技术位。 学习ASP.NE位T AJAX及其组成部分位,以及ASP.NET A位JAX提供的功能。位介绍如何通过服务器端和客位户端代码在Web应用程序芦中使用ASP.NET A芦JAX。这是本章最大的一芦部分。39.1 Aja芦x的概念Ajax允许通过芦异步回送和动态的客户端W芦eb页面处理,改进Web瘸应用程序的用户界面。术语瘸Ajax由Jesse瘸James Garre瘸tt提出,是Asynch瘸ronous JavaS瘸cript and XM瘸L的缩写。提示:Ajax瘸不是一个缩写词,因此不能瘸写作AJAX。但是,在产瘸品名称ASP.NET A
5、瘸JAX中它是大写,这是A瘸jax的Microsof瘸t实现方式,如下一节所述瘸。根据定义,Ajax显然瘸涉及到JavaScrip瘸t和XML。但是,Aja瘸x编程需要使用其他技术,色如表39-1所述。表色39-1Ajax还需要用色服务器端代码处理部分页面色的回送和完整页面的回送,色这包括服务器控件的事件处嗓理程序和Web服务(We梁b服务详见第37章)。图梁39-1显示了这些技术如梁何在Ajax Web浏览梁器模型中联合使用,并与传梁统的Web浏览器模型进行梁比较。在AJAX推出之前梁,表39-1中的前四个技圃术(HTML、CSS、D圃OM和JavaScrip圃t)用于创建所谓的动态H圃TM
6、L(DHTML) W圃eb应用程序。这些应用程圃序比较著名有两个原因:它圃们提供的用户界面要好得多圃;它们一般只能用于一种类圃型的Web浏览器。自DH李TML推出以来,标准已有李了改进,Web浏览器的相李关标准级别也提高了。但是李,它们仍有区别,Ajax李解决方案必须考虑这些区别李。也就是说,大多数开发人淖员实现Ajax解决方案还淖相当慢。只有开发出更抽象淖的Ajax架构(例如AS淖P.NETAJAX),淖创建支持Ajax的网站才淖是企业级开发的一个可行选淖项。AJAX39.2 ASP.淖NET ASP.NET泪AJAX是Ajax架构泪的Microsoft实现泪方式,专用于ASP.NE泪T开发
7、人员。在ASP.N泪ET的最新版本中,ASP邱.NET AJAX是AS邱P.NET核心功能的一部黎分。网站HYPERLI辫NK http:/a辫辫http:/ajax荤.上可以用荤于以前的ASP.NET版荤本,包含相关的文档说明、荤论坛和示例代码,可以用于荤我们使用的ASP.NET荤版本。ASP.NET A荤JAX提供了如下功能:伙 服务器端架构允许AS伙P.NET Web页面响伙应部分页面的回送操作。伙 ASP.NET服务器伙控件便于实现Ajax功能伙。 HTTP处理程序乾允许ASP.NET We乾b服务在部分页面的回送操乾作中,使用JavaScr乾ipt Object N乾otation(
8、JSON乾)串行化功能与客户端代码乾通信。 Web服务支乾持客户端代码访问ASP.类NET应用程序服务,包括类身份验证和个性化服务。类 网站模板可用于创建支类持ASP.NET AJA类X的Web应用程序。类客户端的JavaScr挝ipt库对JavaScr挝ipt语法进行了许多改进挝,还提供了许多代码,来简挝化Ajax功能的实现。这挝些服务器控件和服务器端的挝架构统称为ASP.NET挝Extensions。确ASP.NET AJAX确的客户端部分称为AJAX确库。还可以从网站HYP确ERLINK http确:/ajax.asp.确nethttp:/萨楞上下载另外两个软件包:楞 ASP.NET A
9、J楞AX Control T楞oolkit:这个下载软楞件包包含了由开发团体创建楞的其他服务器控件。这些控楞件是共享的,可以查看和修楞改它们。 Micro哨soft AJAX Li哨brary 3.5:这个哨下载软件包包含JavaS哨cript客户端架构,它哨们由ASP.NET AJ哨AX用于执行Ajax功能哨。如果开发的是ASP.N哨ET AJAX应用程序,哨就不需要这个软件包。这个哨下载软件包适用于其他语言木,例如PHP,使用与AS木P.NET AJAX相同木的代码基执行Ajax功能木。它超出了本章的范围。提木示:还有一个下载软件包称木为Futures,过去用木于给ASP.NET AJ妹A
10、X应用程序添加额外的、妹预先发布的功能或原始功能妹。但在编写本书时,不清楚妹这个下载软件包是否在VS妹2008中得到支持,所妹以本章不介绍它。这两个下妹载软件包提供了功能丰富的妹架构,可以用于在自己的A期SP.NET Web应用期程序中添加Ajax功能。期下面几节将介绍ASP.N期ET AJAX的各个组成期部分。39.2.1 核期心功能ASP.NET A期JAX的核心功能分为两个挖部分:AJAX扩展和AJ挖AX库。1. AJAX扩挖展在安装ASP.NET挖AJAX时,会在GAC中挖安装两个程序集: S惋ystem.Web. E惋xtensions.dl惋l:这个程序集包含ASP惋.NET AJ
11、AX功能,惋包括AJAX扩展和AJA惋X库JavaScript惋文件,它们可以通过Scr惋iptManager组件惋(稍后介绍)来获得。确System.Web.确Extensions.确Design.dll:这确个程序集包含用于AJAX确扩展服务器控件的ASP.确NET Designer确组件,这些服务器控件由A确SP.NET Desig剃ner在Visual S剃tudio或Visual剃Web开发程序中使用。剃ASP.NET AJAX剃中的许多AJAX扩展组件剃都涉及支持部分页面的回送剃和用于Web服务的JSO剃N串行化。这包括各种HT剃TP处理程序组件和对已有墓ASP.NET架构的扩展墓
12、。这些功能都可以通过网站墓的Web.config文墓件来配置。还有用于其他配墓置的类和属性。但大多数配墓置都是透明的,用户很少需墓要改变支持ASP.NET墓AJAX的网站模板提供墓的默认设置。与AJAX扩谩展的主要交互操作是使用服谩务器控件将Ajax功能添谩加到Web应用程序中。有谩几个服务器控件可以用各种谩方式增强Web应用程序。谩表39-2列出了一些服务谩器端组件。本章的后面将介谩绍它们。表 39-2A躁JAX扩展还包含Exte躁nderControl抽躁象基类,来扩展已有的AS躁P.NET服务器控件。它躁由ASP.NET 2.0躁AJAX Future印s CTP中的各种类使用印,如后面
13、所述。2. AJ印AX库在支持ASP.NE印T AJAX的Web应用印程序中,AJAX库包含的榨JavaScript文件榨由客户端代码使用。在这些榨JavaScript文件榨中包含许多功能,其中一些榨是改进JavaScrip榨t语言的通用代码,一些则榨专用于Ajax功能。AJ榨AX库包含的功能彼此互为匀基础,如表39-3所示。匀表 39-3AJAX库匀可以用于扩展和定制支持A匀SP.NET AJAX的匀Web应用程序的操作,但匀注意,不一定要这么做。要匀想在应用程序中不使用任何朽附加的JavaScrip朽t,还有很长的路要走,只朽有需要更高级的功能,才需朽要这么做。如果要编写附带朽的客户端代码
14、,使用AJA朽X库提供的功能会比较容易朽完成任务。AJAX39.2.2墟ASP.NETCo墟ntrol Toolki蛰tAJAX Contro蛰l Toolkit是附加蛰服务器控件的一个集合,包蛰括由ASP.NET AJ只AX团体编写的扩展控件。只扩展控件可以在已有的AS只P.NET服务器控件中添只加功能,一般是给它附带一只个客户端操作。例如,AJ只AX Control T只oolkit中的一个扩展只器能在文本框中放置wa只termark文本,以只扩展文本框控件,当用户还只没有在文本框中添加任何内咋容时,就会显示该文本。这咋个扩展控件在服务器控件T咋extBoxWaterm咋ark中实现。使用
15、AJA咋X Control To咋olkit可以给站点添加咋许多功能,它们超出了核心咋下载包的范围。这些控件可穴以使浏览操作更有趣,也许穴能为增强Web应用程序提穴供许多新思路。但是,AJ穴AX Control T穴oolkit独立于核心下穴载包,所以这些控件并没有穴获得与核心下载包中的控件穴相同的支持。AJAX39.3穴使用ASP.NET前面芋介绍了ASP.NET A芋JAX的组件部分,下面就芋开始探讨如何使用它们增强芋网站。本节将讨论支持AS芋P.NET AJAX的W蚤eb应用程序如何工作,如蚤何使用该软件包中的各种功蚤能。首先仔细研究一个简单蚤的应用程序,然后在后续的蚤章节中添加其他功能
16、。39蚤.3.1 ASP.NE蚤T AJAX网站示例AS瘴P.NET AJAX模板瘴包含了ASP.NET A瘴JAX的所有核心功能。也瘴可以使用AJAX Con瘴trol Toolkit瘴Web Site模板,瘴以包含AJAX Cont珍rol Toolkit中父的控件。本示例要在C:父ProCSharpCh父apter39目录中创建父一个使用默认ASP.NE父T Web Site模板父的新网站PCSAjaxW父ebApp1。修改Def测ault.aspx中的代测码:切换到设计视图(注意测ASP.NET AJAX测控件,如UpdatePa测nel和UpdatePr测ogress,有可视化的测设
17、计组件),双击Calc乏ulate按钮,添加一个乏事件处理程序。修改代码,乏如下所示:保存修改的内容乏,按下F5,运行项目。如乏果有提示,就在Web.c乏onfig中启动调试功能乏。在显示如图39-2所示垦的Web页面时,注意两个垦显示时间是相同的。单击C垦alculate按钮,显垦示小于等于2500的素数垦。除非在较慢的机器上运行垦,否则应立即得到结果。注垦意显示时间现在已经不同了垦,只有UpdatePan独el中的显示时间改变了,独如图39-3所示。最后,独在最大值中添加一些0,引独入一个处理延迟(在较快的独PC上添加三个0就足够了独),再次单击Calcul独ate按钮。这次在显示结独果之
18、前,注意Update款Progress控件显示款一个部分透明的反馈消息,款如图39-4所示。更新应款用程序时,页面仍是可以响款应的。例如,可以滚动页面款。提示:更新完成时,浏览奠器的滚动位置设置为单击C奠alculate按钮之前奠的地方。在大多数情况下,奠部分页面的更新会很快执行奠完,这非常有利于可用性。奠关闭浏览器,返回Visu奠al Studio。39学.3.2 支持ASP.学NET AJAX的网站配学置学习了一个简单的支持A学SP.NET AJAX的学Web应用程序之后,就可学以研究它的工作原理了。首诌先看看应用程序的Web.忆config文件,尤其是忆忆漳web配置段中的如下两漳个代码
19、块:漳ation漳mblies配置段的代烛码确保,ASP.NET烛AJAX程序集Syste烛m.Web. Exten烛sions.dll从GA烛烛烛置元素的代码引用这个程序延集,将它包含的控件(在S延ystem.Web.UI延和System.Web.延UI.WebContro延ls命名空间中)关联到标延记前缀asp上。这两个配延置段对于所有支持ASP.延NET AJAX的Web延应用程序都是必需的。下面虚虚虚odules也是ASP虚.NET AJAX功能所虚虚dlers段定义了三项虚内容:第一,Web服务.混asmx的处理程序用Sy混stem.Web. Ex混tensions命名空间混中的一个
20、新类替代。这个新混类可以通过AJAX库处理混来自客户端调用的请求,包混括JSON串行化和并行化混。第二,添加一个处理程序混,以使用ASP.NET应混用程序服务。第三,给Sc混riptResource爆.axd资源添加一个新的爆处理程序。这个资源用于A爆SP.NET AJAX程爆序集中的AJAX库Jav爆aScript文件,这样爆这些文件就不需要直接包含爆在应用程序中了。爆pModules段添加赐了一个新的HTTP模块,赐它在Web应用程序中添加赐了HTTP请求的其他处理赐代码。这将支持部分页面的赐回送。其他的配置设置是通赐赐ions设置来确定的,劫劫劫iguration的第劫一个子元素。这一段
21、这里没劫有列出,它必须包含进来,劫匪web. extensi匪匪.webServer段匪。提示:截web.extensio截ns段没有包含在默认的截ASP.NET Web截Site配置文件中,详见截下一节。截ystem.webSer截ver包含的设置与II刁S 7 Web服务器相关刁,如果使用IIS的早期版刁本,就不需要这一段。这里刁没有列出这一段。最后是一刁刁段:包含这段是为了确保与膏ASP.NET AJAX膏的旧版本兼容,除非安装了膏ASP.NET AJAX膏1.0版本,否则它不会膏有影响。如果安装了1.0膏版本,这段就会启动第三方膏控件,绑定到ASP.NE膏T AJAX的最新版本上膏。1
22、. 其他配置选项鲍ystem.web.ex鲍tensions段包含鲍的设置为ASP.NET鲍AJAX提供了其他配置,鲍这些配置都是可选的。在默鲍认的ASP.NET We鲍b应用程序模板中不包含它鲍们,可以用这个配置段添加寸的大多数配置都与Web服寸寸ervices元素中,寸寸ting 元素中。首先寸,可以添加一段,通过We寸b服务访问ASP.NET寸身份验证访问(也可以选择尽强制SSL):接下来,通尽过profile Web尽服务,启用和配置对ASP尽.NET个性化功能的访问尽。最后一个与Web服务相尽关的设置是通过角色Web尽服务启用和配置对ASP.浇NET角色功能的访问。最浇浇b.exte
23、nsions浇段包含一个元素,允许配浇置异步通信的压缩和缓存:浇2. AJAX Cont档rol Toolkit的档其他配置要使用AJAX档Control Tool档kit中的控件,可以在w档eb.config中添加档如下配置:这将工具集中的剪控件映射到ajaxToo剪lkit标记前缀上。这些剪控件包含在AjaxCon剪trol- Toolki剪t.dll程序集中,该程剪序集在Web应用程序的/剪bin目录下。还可以使用剪侩r % 指令在Web页侩面上注册控件。39.3.侩3 添加ASP.NET侩AJAX功能一旦通过网岔站模板将网站配置为使用A岔SP.NET AJAX,岔或手工配置新ASP.N
24、E岔T网站或已有的ASP.N岔ET网站,在网站上添加A岔JAX功能的第一步是在W岔eb页面上添加一个Scr昌iptManager控件需,之后,添加Update需Panel等服务器控件,需以启用部分页面的显示功能需,再添加Futures需CTP和AJAX Con需trol Toolkit需中的动态控件,给应用程序需增加可用性和功能。还可以需添加客户端代码,使用AJ需AX库进一步定制和增强应炸用程序的功能。本节介绍可炸以使用服务器控件添加的功炸能。本章的后面将讨论客户炸端技术。1. Scrip炸tManager控件如本彰章前面所述,Script鸳Manager控件必须包鸳含在使用部分页面回送和其鸳
25、他几个ASP.NET A鸳JAX功能的所有页面上。鸳提示:为了确保在Web应鸳用程序的所有页面上都包含鸳ScriptManage挚r控件,必须将这个控件添挚加到应用程序使用的mas挚ter页面上。除了启用A挚SP.NET AJAX功挚能之外,还可以使用属性配挚置这个控件。在这些属性中挚,最简单的是Enable挚PartialRende唁ring,其默认值是tr唁ue。如果把这个属性设置唁为false,就禁用了所唁有异步回送处理功能,例如唁UpdatePanel控唁件提供的页面回送功能。如唁果要给经理做一个演示,比唁较支持AJAX的网站和传唁统的网站,就可以这么做。唁使用ScriptMana焉g
26、er控件有几个原因,例焉如下面的情形: 确定焉是否把调用服务器端代码作焉为部分页面回送的结果焉添加对其他客户端Jav洲aScript文件的引用洲 引用Web服务洲给客户返回错误消息下面洲几节介绍这些配置选项。(诌1) 检测部分页面的回送诌ScriptManage诌r控件包含一个布尔属性I诌sInAsyncPost诌Back。可以在服务器端诌代码中使用这个属性,检测州部分页面是否正在回送。注瞻意ScriptManag瞻er控件可能在maste瞻r页面上。除了通过mas瞻ter页面访问这个控件之瞻外,还可以使用静态方法G瞻etCurrent(),瞻获得对当前ScriptM瞻anager实例的引用。
27、瞻例如:必须将对Page控园件的引用传送给GetCu园rrent()方法。例如园,如果在ASP.NET园Web页面的Page_L园oad()事件处理程序中园使用这个方法,就可以将t园his用作Page引用。园另外,注意检查null引婴用,以避免异常。(2)婴客户端JavaScrip婴t引用除了在HTML页面婴婴pt元素中添加代码之外义,还可以使用Script义Manager类的Scr义ipts属性。这可以使脚义本引用集中在一起,更便于义义UpdatePanel义枣枣枣sp: ScriptRe枣ference子控件元枣素。使用ScriptRe枣ference控件的Pa枣th属性引用定制脚本。下粥
28、面的例子说明了如何在We粥b应用程序的根文件夹下,粥添加对一个定制脚本文件M粥yScript.js的引粥用:(3) Web服务引粥用为了从客户端JavaS居cript代码中访问We居b服务,ASP.NET居AJAX必须生成一个代理居类。要控制这个操作,可以居使用ScriptMana居ger类的Service居s属性。与Scripts居属性一样,也可以以声明方居式指定这个属性,但这次要秽秽秽sp: ServiceR秽eference控件。秽对于Services属性秽中的每个ScriptRe秽ference对象,都需秽要使用Path属性指定W秽eb服务的路径。Serv穿iceReference穿类
29、也有一个InlineS穿cript属性,它默认为穿false。这个属性是f穿alse时,客户端代码向穿服务器发出请求,会得到一穿个代理类,来调用Web服穿务。为了改进性能(尤其是穿在一个页面上使用大量We搬b服务的情况),可以将I劫nlineScript设劫置为true,这会在页面硅的客户端脚本中定义代理类硅。ASP.NET Web硅服务的文件扩展名是.as硅mx。如果不想详细阅读本硅章,但希望在Web应用程硅序的根文件夹下添加对We硅b服务MyService硅.asmx的引用,应使用硅下面的代码:采用这种方式惦只能添加对本地Web服务惦的引用(即Web服务和调惦用代码在同一个Web应用惦程序
30、中)。可以通过本地W惦eb方法间接调用远程We惦b服务。本章的后面将讨论惦如何从客户端JavaSc抖ript代码中异步调用W抖eb方法,这些方法是以这抖种方式使用代理类生成的。抖(4) 客户端错误消息如抖果在部分页面的回送过程中抖抛出了异常,默认操作是将抖异常包含的错误消息放在客抖户端JavaScript诲警报消息框中。处理Scr诲iptManager实例诲的AsyncPostBa诲ckError事件,可以诲定制要显示的消息。在这个诲事件的处理程序中,可以使诲用AsyncPostBa诲ckErrorEvent诲Args.Except诲ion属性访问抛出的异常诲,使用ScriptMan囱ager
31、. AsyncP囱ostBackError囱Message属性设置显囱示给客户端的消息。这么做囱可以给用户隐藏异常细节。囱如果要重写默认操作,以另囱一种方式显示消息,就必须囱使用JavaScript囱处理客户端对象PageR帮equestManage帮r的endRequest帮事件,详见本章后面的内容帮。2. 使用Update帮Panel控件Updat帮ePanel控件是编写支帮持ASP.NET AJA典X的Web应用程序时最常典用的控件。如本章前面的简典单例子所述,这个控件可以典封装Web页面的一部分,典使之参与部分页面的回送操典作。为此,要在页面上添加典一个UpdatePane典l控件,用
32、需要的控件填充典怖Template。根据怖UpdatePanel控怖件的RenderMode怖怖Template模板的怖钝span元素中。这个属钝性的默认值是Block,钝钝钝,应将RenderMod钝e属性设置为Inline钝。(1) 一个Web页面厂上的多个UpdatePa厂nel控件可以在一个页面厂上包含任意多个Updat厂ePanel控件。如果回厂送操作是由包含在页面上的厂任一个UpdatePan厂克tTemplate模板克中的控件引发,就进行部分克页面的回送,而不是整个页克面的回送。这会使所有的U克pdatePanel控件克根据其UpdateMod克e属性值进行更新。这个属克性的默认
33、值是Always克,表示UpdatePan克el为页面上的部分页面回奎送操作而更新,即使这个操皋作是由另一个Update皋Panel控件引发的,也皋是如此。如果把这个属性设皋置为Conditiona皋l,UpdatePane皋l就仅在它包含的控件引发皋部分页面回送操作时更新,皋或者在启动了已定义的触发皋器时更新。触发器稍后介绍皋。如果把UpdateMo颁de属性设置为Condi颁tional,还可以将C颁hildrenAsTri颁ggers属性设置为fa颁lse,禁止Update颁Panel包含的控件触发颁UpdatePanel的颁更新操作。但要注意,在这颁种情况下,这些控件仍会触颁发一个部分
34、页面回送操作,加它会使页面上的其他Upd加atePanel进行更新加。例如,这会使Updat掸eMode属性值为Alw睹ays的UpdatePa睹nel进行更新,如下面的睹代码所示:在这段代码中,睹UpdatePanel2睹控件的UpdateMod睹e属性值设置为默认的Al睹ways。单击按钮时,会睹引发一个部分页面回送操作睹,但只更新UpdateP懂anel2。注意只更新了懂Panel2 rend懂er time标签。(懂2) 服务器端的Upda懂tePanel更新有时页懂面上有多个UpdateP懂anel控件,可以不更新秽其中的一个,除非满足某些秽条件。在这种情况下,应将秽UpdatePa
35、nel的秽UpdateMode属性秽设置为Condition秽al,如上一节所述,再把秽ChilerenAsTr秽iggers属性设置为f秽alse。接着,对于页面秽上引发部分页面回送操作的秽控件,在服务器端的事件处秽理程序中,(有条件地)调腐用UpdatePanel腐的Update()方法,腐例如:(3) Upda腐tePanel的触发器给腐Web页面上其他地方的控腐件的Triggers属性羹添加触发器,就可以通过该羹控件更新UpdatePa羹nel控件。触发器是We羹b页面上其他地方的控件的羹事件与UpdatePan羹el控件之间的关联。所有羹的控件都有默认事件(如按羹钮控件的默认事件是C
36、li羹ck),所以可以不指定事羹件名。有两种触发器可以添羹加,它们用两个类表示:调 AsyncPostB调ackTrigger:这调个类会在指定控件的指定事调件发生时,更新Updat调ePanel控件。调PostBackTrig调ger:这个类会在指定控调件的指定事件发生时,更新贩整个页面。一般使用Asy贩ncPostBackTr贩igger,但如果希望U贩pdatePanel中的贩一个控件引发整个页面的回贩送操作,就可以使用Pos贩tBackTrigger贩。这两个触发器类有两个属第性ControlID和E第ventName,Con第trolID指定了通过其第标识符启动触发器的控件,第Eve
37、ntName指定了第控件中链接到触发器上的事第件名。为了扩展前面的例子第,考虑下面的代码:新的按国钮控件Button2指定国为UpdatePanel国1中的一个触发器。单击这国个按钮时,会更新Upda国tePanel1和Upd国atePanel2。更新国UpdatePanel1国是因为启动了触发器,更新国UpdatePanel2滁是因为它使用了Updat滁eMode的默认值Alw滁ays。3. 使用Upd滁ateProgress如滁前面的例子所示,Upda滁teProgress控件滁允许在部分页面的回送过程版中给用户显示进度消息。使版用ProgressTem版plate属性可提供显示版进度的模
38、板,为此,一般使版版sTemplate元素版。使用Associate版dUpdatePanel切ID属性将UpdateP切rogress控件与指定切的UpdatePanel切关联起来,就可以在页面上切放置多个UpdatePr切ogress控件。如果没切有设置该属性(默认),无切论哪个UpdatePan切el引发了部分页面回送操切作,都显示UpdateP切rogress模板。在执挖行部分页面回送操作时,显挖示UpdateProgr挖ess模板之前有一个延迟挖。这个延迟可以通过Dis挖playAfter属性来挖配置,DisplayAf挖ter是一个int属性,挖指定了延迟时间(单位是毫挖秒),默认
39、为500毫秒。箱最后,可以使用布尔属性D箱ynamicLayout箱指定在显示模板之前,是否惕为模板分配空间。这个属性惕的默认值是true,此时惕页面上的空间是动态分配的惕,所以为了在线显示进度模惕板,需要删除其他控件。如妻果把这个属性设置为fal妻se,就在显示模板之前,妻为模板分配空间,这样页面妻上其他控件的布局就不会改妻变。可以根据显示进度时要妻达到的效果设置这个属性。妻对于使用绝对坐标定位的进妻度模板,如前面的例子所示妻,应将这个属性设置为默认妻值。4. 使用扩展器控件蜀ASP.NET AJAX蜀的核心软件包包含一个类E蜀xtenderContr蜀ol,它的作用是允许扩展蜀其他ASP.
40、NET服务器蜀控件(即增加功能)。它广蜀泛应用于AJAX Con蜀trol Toolkit叁,效果不错。可以使用AJ叁AX Control T叁oolkit中的模板创建叁自己的扩展控件。Exte叁nderControl控叁件的工作方式都是类似的:叁把它们放在页面上,与目标叁控件关联起来,添加进一步叁的配置。接着扩展器就会执叁行客户端代码,以添加功能叁。为了了解扩展控件,在一桅个简单的例子中创建一个新桅的网站PCSExtend桅erDemo,放在C:桅ProCSharpCh桅apter39目录下,把桅AJAX Control桅Toolkit程序集添桅加到网站的bin目录下,桅给Default.a
41、sp晓x添加如下代码:还需要在晓这个文件的后台代码中添加晓如下事件处理程序:在浏览晓器中,刚开始并没有显示很晓多内容,扩展器似乎没有什晓么作用,如图39-5所示晓。但是,把鼠标停在文本唾green上时,会动态唾显示一个下拉框。如果单击唾这个下拉框,就会显示一个唾列表,如图39-6所示。唾单击下拉列表中的一个链接唾时,文本会改变(一个部分唾页面回送操作之后)。对于士这个简单的例子,要注意两士点。第一,非常容易将扩展士器与目标控件关联起来。第士二,下拉列表用定制代码设士置了样式,这表示可以在列士表中放置任意内容。这个简士单的扩展器是给Web应用士程序添加功能的有效方式,士使用起来也很简单。AJA透
42、X Control To透olkit中的扩展器在不透断增加和更新,所以请定期透访问HYPERLINK透http:/aja捅/aj蓖axtoolkith蓖ttp:/ajax.a蓖/ajaxt蓖oolkit。这个Web蓖页面包含所有当前的扩展器蓖的实时演示,可以看到它们蓖的工作情况。除了AJAX较Control Too较lkit提供的扩展器控件较之外,还可以创建自己的扩较展器控件。为了使这个过程较尽可能简单,可以使用项目较模板ASP.NET AJ较AX Control P较roject。这个项目包较含扩展器需要的所有基本功较能,如用于扩展器的服务器较端类和扩展器使用的客户端岔JavaScript文
43、件岔。要创建有效的扩展器,必岔须使用AJAX库。39.岔3.4 使用AJAX库岔AJAX库有许多可进一步岔增强Web应用程序的功能岔。但是,为了增强Web应岔用程序,至少需要了解Ja岔vaScript的基本知岔识。本节将介绍AJAX库岔提供的一些功能,但这不是岔一个全面的教程。使用AJ岔AX库的基本规则与在We岔b应用程序中添加任意类型岔的客户端脚本一样,仍使用藏核心语言JavaScri藏pt,与DOM交互。但是藏,在许多方面,AJAX库藏都使工作更容易完成。本节藏将学习这些内容,为用户进藏一步试验AJAX库、参考藏在线AJAX库文档打下基藏础。本节介绍的技术都在P藏CSLibraryDem仇
44、o项目中演示,该项目将贯仇穿本章的剩余内容。1.仇给Web页面添加Java仇Script首先需要了解仇的是如何给Web页面添加仇客户端JavaScrip仇t,这里有三个选项:喘喘素,在ASP.NET W喘eb页面上在线添加Jav喘aScript 将J喘avaScript添加到斥单独的JavaScrip斥t文件中,其扩展名是.j斥s,再使用ScriptM斥斥ripts子元素(首选斥斥素中引用这些文件 从津服务器端代码中生成Jav津aScript,例如后台津代码或定制的扩展器控件这津些技术都有自己的优点。对津于原型代码,在线编码是无津可替代的,因为它非常快,近易于使用。将HTML元素臼的客户端事件
45、处理程序和带臼客户端函数的服务器控件关开联起来是很容易的,因为所开有的代码都在同一个文件中开。使用单独的文件有利于代开码重用,因为可以创建自己九的类库,这类似于已有的A九JAX库JavaScri九pt文件。从后台代码中生九成代码较难实现,因为我们九通常不能像使用C#那样在九编写JavaScript九代码时访问Intelli九Sense。但是,可以动九态生成代码,以响应应用程绩序的状态,有时这是完成任绩务的唯一方式。可以用AJ绩AX Control T绩oolkit创建的扩展器绩包含一个独立的JavaS绩cript文件,它用于定绩义操作,解决将客户端代码绩显示到服务器上的一些问题绩。本章将使用在
46、线编码技术褂,因为它最简单,允许我们褂只关注JavaScrip褂t功能。2. 全局实用函褂数AJAX库提供的一个最褂常用的特性是封装了其他功典能的全局函数集,包括:典 $get():这个函典数可以获得DOM元素的一典个引用,它将其客户端id典值提供为一个参数,可选的典第二个参数指定了要搜索的典父元素。 $crea投te():这个函数可以创投建指定JavaScrip投t类型的对象,同时进行初投始化。可以给这个函数提供投15个参数。第一个参数投是要实例化的类型,它一般投是由AJAX库定义的一个投类型。其他参数分别指定了投属性的初始值、事件处理程投序、其他组件的引用和对象投要关联的DOM对象。芦$a
47、ddHandler芦():这个函数为给对象添芦加事件处理程序提供了一种芦缩写方式。还有更多的全局芦函数,但这些是最常用的全芦局函数,尤其是$crea芦te(),它可以大大减少农初始化对象所需的代码量。农3. 使用AJAX库Ja农vaScript OOP农扩展AJAX库包含一个增农强的架构,它定义了使用基农于OOP的系统的类型,与农.NET Framewo涩rk技术紧密相关。可以创涩建命名空间,给命名空间添涩加类型,为类型添加构造函涩数、方法、属性和事件,甚涩至可以在类型定义上使用继涩承和接口。本节将介绍如何涩使用这个功能的基本内容,涩但这里没有探讨事件和接口涩。这些结构超出了本章的范士围。(1
48、) 定义命名空间士要定义命名空间,应使用T士ype.register士Namespace()函士数,例如:注册了命名空间侣后,就可以给它添加类型了侣。(2) 定义类定义类需侣要三步。第一,定义构造函侣数,第二,添加属性和方法侣,第二,注册该类。要定义侣构造函数,需要使用命名空速间和类名来定义一个函数,速例如:这个构造函数带两个速参数,使用它们设置本地字速段(注意不一定要明确定义速这些字段,只需设置它们的速值)。要添加属性和方法,速应给它们赋予类的Prot圃otype属性,如下所示圃:这段代码提供get和s圃et存取器定义了两个属性圃:要注册类,应调用其re圃gisterClass(圃)函数:(
49、3) 继承派生六类的方式与创建类相同,但六有一些小区别。在构造函数六中使用initializ六eBase()函数初始化六基类,以数组的形式传送参六数:用前面的方式定义属性六和方法:注册类时,要把基钎类类型提供为第二个参数:钎将它们传送为其他参数,可钎以实现接口,但这里为了简钎单,没有提供其细节。(4钎) 使用用户定义的类型以挽这种方式定义了类之后,就挽可以通过简单的语法实例化挽和使用它们了。例如:这段排代码会显示一个JavaS排cript警报框,如图3排9-7所示。如果要测试一祥下,可以运行PCSLib祥raryDemo项目,单祥击Text OOP Fu祥nctionality按祥钮。4. P
50、ageReq祥uestManager和祥Application对祥象在AJAX库中,最有用酋的类是PageReque酋stManager和Ap酋plication。Pa酋geRequestMan酋ager在Sys.Web酋Forms命名空间中,A酋pplication在S酋ys命名空间中。对于这两酋个类,重要的是它们提供的酋几个事件可以与JavaS夷cript事件处理程序关夷联起来。这些事件在页面生夷存期(用于Applica夷tion)或部分页面回送夷过程(用于PageReq夷uestManager)夷中非常有趣的点发生,可以夷在这些关键时刻执行操作。夷AJAX库定义事件处理程章序的方式类似于
51、.NET章Framework中的事章件处理程序的定义方式。每章个事件处理程序都有类似的章签名,带两个参数。第一个章参数是对生成事件的对象的章引用。第二个参数是Sys章.EventArgs类的章一个实例或派生自这个类的章一个子类的实例。Page章RequestManag抑er和Applicati抑on提供的许多事件都包括抑专门的事件变元类,它可以抑用于确定事件的更多信息。抑表39-4按照事件的发生抑顺序列出了这些事件,先是抑加载页面,然后启动部分页抑面的回送操作,最后是关闭抑页面。表 39-4使用鱼静态的add_xxx()鱼方法,可以给Applic鱼ation对象的事件添加鱼事件处理程序,例如:
52、Pa鱼geRequestMan鱼ager的过程与此类似,鱼但必须使用get_ins鱼tance()函数获得当蛹前对象的一个实例,例如:要在PCSLibraryD要emo应用程序中,为Pa要geRequestMan要ager.endRequ要est添加了一个事件处理要程序。这个事件处理程序响要应服务器端处理的错误,在要id为errorDisp要要中显示一个错误消息。要测要试这个方法,可以单击Te要st Client-Si要de Error Dis要play按钮,如图39-要8所示。得到该结果的代码要如下:注意EndRequ肘estEventArgs肘对象的errorHand肘led属性设置为tr
53、ue肘,这会禁止执行默认操作,肘即使用JavaScrip肘t的alert()函数在肘对话框中显示错误消息。在肘服务器上抛出一个异常,就液生成了错误,如下所示:还液有许多情形可以使用事件处液理技术,来处理PageR液equestManage液r和Applicatio液n的事件。5. Java圆Script的调试Jav圆aScript很难调试是圆出了名的。但这在VS的最圆新版本中得到了解决。现在圆可以像C#代码那样在Ja圆vaScript代码中添圆加断点,单步执行代码了。圆还可以在中断模式下查询典圆型状态,改变属性值等。编嘘写JavaScript代嘘码时使用的Intelli嘘Sense功能也在VS
54、的嘘最新版本中得到了很大改进嘘。有时还希望添加调试和跟嘘踪代码,在代码执行过程中嘘报告信息,例如使用Jav嘘aScript的aler嘘t()函数在对话框中显示朽信息。有一些第三方工具可朽用于添加调试的客户端UI朽,包括: Fiddl朽er:这个工具可以从H朽YPERLINK ht秀tp:/www.fid元元/www.fiddl元上获元得,它可以记录计算机和W元eb应用程序之间的所有H元TTP通信,包括部分页面元的回送。还有一些工具可以元查看在处理Web页面的过垣程中发生的事件的详细信息窒。 Nikhil的W窒eb Developme窒nt Helper:这个窒工具可以从HYPERL窒INK h
55、ttp:/窒projects.nik窒/Pro焉jectshttp:焉/projects.n焉/P焉rojects/Web焉DevHelper.as焉px上获得,它也可以记录焉HTTP通信。另外,这个焉工具包含许多专门用于AS焉P.NET和ASP.NE浴T AJAX开发的实用程浴序,例如,可以查看视图状浴态,执行即时的JavaS浴cript代码。后者特别浴适合于测试在客户机上创建浴的对象。Web Deve浴lopment Help浴er还在发生JavaSc浴ript错误时显示其他错浴误信息,更便于跟踪Jav浴aScript代码中的错嗅误。AJAX库也提供了S嗅ys.Debug类,给应嗅用程序添
56、加额外的调试特性嗅。该类的一个最有用的特性嗅是Sys.Debug.t嗅raceDump()函数嗅,它可以分析对象,使用这针个函数的一种方式是将一个针id为TraceCons针ole的textarea针控件放在Web页面上,接针着,Debug的所有输出针就会发送到这个控件上。例针如,可以使用traceD针ump()方法,将App针lication对象的信针息输出到控制台上:这会得瞻到如下输出:在这个输出中瞻,可以看到该对象的所有属瞻性。这个属性特别适合于A瞻SP.NET AJAX开瞻发。6. 异步调用Web直方法ASP.NET AJ郧AX的一个最强大的特性是郧可以从客户端脚本中调用W郧eb方法,
57、这就允许访问数郧据、服务器端处理和其他功郧能。本书的第42章介绍了郧Web方法,所以这里不详郧细介绍它。但是要讨论一些郧基本知识。简言之,Web主方法是可以在Web服务中主提供,能通过Intern主et访问远程资源的方法。主在ASP.NET AJA主X中,还可以将Web方法主用作服务器端Web页面的主后台代码中的静态方法。在主Web方法中使用参数和返主回值的方式与其他方法类型主相同。在ASP.NET薛AJAX中,Web方法是薛异步调用的。给Web方法薛传送参数,定义一个回调函薛数,当Web方法调用完成薛时,就会调用这个回调函数薛。该回调函数用于处理We薛b方法的响应。也可以提供薛另一个回调函数
58、,以处理调薛用失败的情况。在PCSL应ibraryDemo应用应程序中,单击Call W应eb Method按钮时应,就调用一个Web方法,应如图39-9所示。在客户应端脚本中使用Web方法之应前,必须生成一个客户端代义理类,以进行通信。为此,义最简单的方式是在Scri义ptManager控件中义,引用包含Web方法的W义eb服务的URL:ASP义.NET Web服务使用义扩展名.asmx,如上面义的代码所示。为了使用客户义端代理访问Web服务中的遗Web方法,必须给Web遗服务应用System.W遗eb.Script.Se遗rvices.Scrip遗tService属性。对遗于Web页面的后台代码中遗的Web方法,不需要这个遗属性,或者ScriptM遗anager中的这个引用垣,但必须使用静态方法,给垣方法引用System.W垣eb.Services.垣We
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
评论
0/150
提交评论