ASP.NET Ajax学习笔记二(Ajax基本框架)


======================================================
注:本文源代码点此下载
======================================================

二.asp.net ajax架构:

ajax技术加强了很多asp.net本身的弱项。本章要继续讨论的ajax基本技术是:

nasp.net ajax 基本框架

nasp.net ajax library

n多浏览器兼容层

n微软ajax库

n了解客户端事件循环周期

n服务端组件和控件

njavascript文件

n理解asp.net ajax 配置文件web.config

asp.net ajax基本框架

ajax模式下,web程序由以前的单服务端处理变成了客户端和服务端共同工作的情况。在客户端包括了asp.net ajax 基于客户端的扩展(包括javascript库,控件,等等),javascript代码和html,在服务端包含了iis,asp.net 运行库(.net framwork 和 asp.net 组件)以及asp.net ajax基于服务的扩展包(控件,组件,程序集等等)。

代码库

code library在asp.net ajax中分为两个主要物理块: 客户端功能块和服务端功能块。他包含了所有的javascript文件,正是这些文件时asp.net ajax工作的魔力源泉。javascript文件包含了丰富的面向对象模型的代码。虽然服务端的功能需要microsoft ajax library的支持,但是对客户端功能却并非是必须的,这使得他可以运行在任何服务器平台上,包括linux,apache等等。

asp.net ajax还提供了一个服务端运行库,包括一系列组件和控件,如updatepanel,通过updatepanel可以使ajax开发更加快捷甚至零代码。从开发者的角度来看,客户端层和服务端层经常要在一起协作,不过他们的工作是很简单的。比如你正开发一个服务端功能,你可能会使用updatepanel,然后你不需要对客户端进行编码,因为updatepanel已经为你做好了,你只需要一些简单的开发。

多浏览器兼容层

microsoft ajax 运行库已经是以跨浏览的目标编写的,因此,这些javascript代码都是可以跨常用的浏览器运行的,幸运的是,这些都是自动完成的。我们不需要担心,但是为了使我们自己写的代码能够跨浏览器,我们最好能对microsoft ajax运行库进行深入的了解和学习。

microsoft ajax运行库

新的javascript推荐使用以面向对象机制进行编码,并且加入的类,继承,接口,命名空间,媒介和反射。javascript还变得使c#开发人员更加熟悉,因为他加入stringbuilder和timers。下面是microsoft ajax运行库的命名空间结构:

命名空间

描述

global

包括 array,boolean,string,error,number和对象等javascript已有的类型的扩展。

sys

类似于.net framework的system,是命名空间的根元素,包括了一些基本的类,application和stringbuilder等。还包括了一些常用的接口,如idisposable和inotifypropertychange等。

sys.net

包含了网络通信的一些基本对象,如webrequest,xmlhttpexccutor等,sys.net本质上是对客户端/服务端通信的压缩封装。

sys.serialization

用于在服务器和客户端通信时的对象序列化操作。

sys.webforms

包含pagerequestmanager等对象,是asp.net ajax局部刷新技术的划分(?)

sys.ui

包含了用户接口有关的机制,如控件,事件和枚举等等。

sys.services

提供对asp.net 服务端服务,如验证和profile service。

在asp.net ajax中javascript编程变得越来越想c#编程,正是微软的努力使的.net开发人员能更快的掌握javascript编程,并进行快速开发。

client-side 事件循环周期

正如asp.net的服务器循环周期一样(一连串的onpreload,onload事件等)。asp.net ajax也存在一个客户端循环周期。了解这个周期将使你更加深刻的了解asp.net ajax技术原理。

事件

描述

initializerequest

当异步请求第一次初始化时激发此事件,在这里可以检测请求并决定是否通行。

beginrequest

当asp.net ajax准备完毕并向服务器提交请求之前激发,这通常用来向用户显示一个提示信息,表示请求开始。

pageloading

当客户端获得服务器响应并刷新页面之前激发。

pageloaded

在初始化页面载入时激发的唯一事件。

endrequest

当页面获得服务器响应并显示相应结果后激发,这里通常可以隐藏先前的提示信息,并表示请求周期结束。

这些事件可以通过pagerequestmanager类来访问,后面的章节会提供一个例子演示。

服务端组件和控件

asp.net ajax提供了新的组件,控件和类。这些基于服务端的功能深深依赖于microsoft ajax library中的javascript类。

当你安装完asp.net ajax以后,在机器的全局程序集缓存(global assembly cache,在系统跟目录下)将会添加system.web.extensions 程序集。通过该程序集我们就可以进行基于服务端的新组件,控件的开发了。

服务端命名空间

描述

system.web.configuration

提供对asp.net ajax 配置文件web.config的控制。

system.web.handlers

提供对script下载最优化支持。

system.web.script.serlialization

提供了对json的序列化和反序列化扩展。

system.web.script.services

提供对webservice的调用功能。

system.web.ui

提供了script管理功能和网络通信代码

system.web.ui命名空间包含了大部分服务端功能模块。它的一些子空间如system.web.ui.compatability是重要的空间扩展了asp.net 验证控件的功能。system.web.ui.design控件提供了对asp.net ajax自定义扩展功能。

服务端控件

控件描述

scriptmanager

运行时隐藏,是每个ajax页面必须的控件并且只能有一个实例,管理着客户端脚本。

scriptmanagerproxy

运行时隐藏,在母版结构页面中使用。

updatepanel

在updatepanel内部的控件都能够获得局部刷新的支持。

updateprogress

显示了一个状态用于长时间的异步请求提示信息。

timer

按指定时间周期执行客户端事件。

scriptmanager管理着客户端脚本文件,提供了更有效的载入支持。并提供一些错误处理,更多的配置会在以后研究。

当使用母版页时,你就会用到scriptmanagerproxy控件,具体方法暂时不多讨论。

updatepanel提供了一种最快最简单的局部刷新技术,他决定了页面哪些部分会局部刷新,所有在他内部的控件都可以获得局部刷新支持。这些刷新可以被一系列事件或timer控件触发,更多讨论会在后面提及。

当访问数据库等比较耗时的请求时,updateprocess控件就可以提供一个动态的提示信息用于通知用户,请求正在执行。具体用法会在后面提及。

timer控件用法也比较简单。

javascript文件

javascript文件保存在program files\microsoft asp.net\asp.net 2.0 ajax extensions\v1.0.x\microsoftajaxlibrary\system.web.extensions\v1.0.x 文件夹下。主要包括:

文件

说明

microsoftajax.js

最常见的javascript文件,包含了大多数ajax库的代码。

microsoftajaxwebforms.js

包含了asp.net ajax webforms框架代码。

microsoftajaxtimer.js

timer控件的代码,比较小的文件。

理解asp.net ajax 配置文件web.config

configuration>

sectionname="profileservice"type="system.web.configuration.scriptingprofileservicesection, system.web.extensions, version=1.0.61025.0, culture=neutral, publickeytoken=31bf3856ad364e35"requirepermission="false"allowdefinition="machinetoapplication" />

sectionname="authenticationservice"type="system.web.configuration.scriptingauthenticationservicesection, system.web.extensions, version=1.0.61025.0, culture=neutral, publickeytoken=31bf3856ad364e35"requirepermission="false"allowdefinition="machinetoapplication" />

sectiongroup>

sectiongroup>

sectiongroup>

configsections>

模块主要用于在你的网站需要记录用户个人信息的时候,比如当你需要记录某个用户拖拽的位置信息,此时会用到该属性。具体应用会在后面提及。

authenticationservice>模块主要用于网站用户控制,当你的网站是匿名访问时就不需要该项功能.

pages>

controls>

addtagprefix="asp"namespace="system.web.ui"assembly="system.web.extensions, version=1.0.61025.0, culture=neutral, publickeytoken=31bf3856ad364e35"/>

controls>

pages>

这项模块在全局注册了ajax服务器控件,从而使的每个页面不需要重复引用.

compilationdebug="false">

assemblies>

addassembly="system.web.extensions, version=1.0.61025.0, culture=neutral, publickeytoken=31bf3856ad364e35"/>

assemblies>

compilation>

编译模块定义了页面的测试属性,在调试时一般将debug设置为true从而使页面提供更多的调试信息,当网站发布时应该将其设置为false.

httphandlers>

removeverb="*"path="*.asmx"/>

addverb="*"path="*.asmx"validate="false"type="system.web.script.services.scripthandlerfactory, system.web.extensions, version=1.0.61025.0, culture=neutral, publickeytoken=31bf3856ad364e35"/>

addverb="*"path="*_appservice.axd"validate="false"type="system.web.script.services.scripthandlerfactory, system.web.extensions, version=1.0.61025.0, culture=neutral, publickeytoken=31bf3856ad364e35"/>

addverb="get,head"path="scriptresource.axd"type="system.web.handlers.scriptresourcehandler, system.web.extensions, version=1.0.61025.0, culture=neutral, publickeytoken=31bf3856ad364e35"validate="false"/>

httphandlers>

remove模块移去了asp.net默认的webservice方式,add模块在随后定义了asp.net ajax方式的webservice.最后一项add部分定义了脚本文件应该通过asp.net ajax http handler方式下载从而具有更高的性能和合理的顺序.

httpmodules>

addname="scriptmodule"type="system.web.handlers.scriptmodule, system.web.extensions, version=1.0.61025.0, culture=neutral, publickeytoken=31bf3856ad364e35"/>

httpmodules>

system.web>

这项定注册了ajax使用的http model.


======================================================
在最后,我邀请大家参加新浪APP,就是新浪免费送大家的一个空间,支持PHP+MySql,免费二级域名,免费域名绑定 这个是我邀请的地址,您通过这个链接注册即为我的好友,并获赠云豆500个,价值5元哦!短网址是http://t.cn/SXOiLh我创建的小站每天访客已经达到2000+了,每天挂广告赚50+元哦,呵呵,饭钱不愁了,\(^o^)/
ajax技术,无刷新技术 导读:ScriptManager控件包括在ASP.NET 2.0 AJAX Extensions中,它用来处理页面上的所有组件以及页面局部更新,生成相关的客户端代理脚本以便能够在JavaScript中访问Web Service,所有需要支持ASP.NET AJAXASP.NET页面上有且只能有一个ScriptManager控件。在ScriptManager控件中我们可以指定需要的脚本库,或者指定通过JS来调用的Web Service,以及调用AuthenticationService和ProfileService,还有页面错误处理等。 ASP.NET AJAX入门系列(3):使用ScriptManagerProxy控件 导读:在ASP.NET AJAX中,由于一个ASPX页面上只能有一个ScriptManager控件,所以在有母版页的情况下,如果需要在Master-Page和Content-Page中需要引入不同的脚本时,这就需要在Content-page中使用ScriptManagerProxy,而不是ScriptManager,ScriptManager 和 ScriptManagerProxy 是两个非常相似的控件。 ASP.NET AJAX入门系列(4):使用UpdatePanel控件(一) 导读:UpdatePanel可以用来创建丰富的局部更新Web应用程序,它是ASP.NET 2.0 AJAX Extensions中很重要的一个控件,其强大之处在于不用编写任何客户端脚本,只要在一个页面上添加几个UpdatePanel控件和一个ScriptManager控件就可以自动实现局部更新。通过本文来学习一下UpdatePanel简单的使用方法(第一篇)。 ASP.NET AJAX入门系列(5):使用UpdatePanel控件() 导读:UpdatePanel可以用来创建丰富的局部更新Web应用程序,它是ASP.NET 2.0 AJAX Extensions中很重要的一个控件,其强大之处在于不用编写任何客户端脚本,只要在一个页面上添加几个UpdatePanel控件和一个ScriptManager控件就可以自动实现局部更新。通过本文来学习一下UpdatePanel其他的一些使用方法(第篇)。 ASP.NET AJAX入门系列(6):UpdateProgress控件简单介绍 导读:在ASP.NET AJAX Beta2中,UpdateProgress控件已经从“增值”CTP中移到了ASP.NET AJAX核心中,本文简单介绍一些它的基本用法,翻译自官方文档。 ASP.NET AJAX入门系列(7):使用客户端脚本对UpdateProgress编程 导读:在本篇文章中,我们将通过编写JavaScript来使用客户端行为扩展UpdateProgress控件,客户端代码将使用ASP.NET AJAX Library中的PageRequestManager,在UpdateProgress控件中,将添加一个Button,来允许用户取消异步更新,并且使用客户端脚本来显示或者隐藏进度信息,翻译自官方文档。 ASP.NET AJAX入门系列(8):自定义异常处理 导读:在UpdatePanel控件异步更新时,如果有错误发生,默认情况下会弹出一个Alert对话框显示出错误信息,这对用户来说是不友好的,本文看一下如何在服务端和客户端脚本中自定义异常处理,翻译自官方文档。 ASP.NET AJAX入门系列(9):在母版页中使用UpdatePanel 导读:本文简单介绍一下在母版页中使用UpdatePanel控件,翻译自官方文档。 ASP.NET AJAX入门系列(10):Timer控件简单使用 导读:本文主要通过一个简单示例,让Web页面在一定的时间间隔内局部刷新,来学习一下ASP.NET AJAX中的服务端Timer控件的简单使用。 ASP.NET AJAX入门系列(11):在多个UpdatePanle中使用Timer控件 导读:本文将使用Timer控件更新两个UpdatePanel控件,Timer控件将放在UpdatePanel控件的外面,并将它配置为UpdatePanel的触发器,翻译自官方文档 作者:TerryLee 出处:http://terrylee.cnblogs.com
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值