Ajax是一种实现异步网络应用的技术。
用Ajax和没用Ajax的区别:
没用Ajax时:每一次请求与响应,都会是一次完整的请求与响应的过程,即使用户只是想获得部分页面的更新,也将是整个页面的再一次请求与响应。这将消耗大量的网络带宽和服务器资源。
用Ajax:支持Ajax的Web页面在客户机上包含一个Javascript库,在请求发送是,这个Javascript库会调用Web服务器,得到部分页面的一个响应;接着客户机上的Javascript库更新了这部分页面,但并没有更新整个页面,只处理部分页面,用户就会觉得页面比较流畅,响应速度更快了。Javascript库可以进行异步页面请求,更新局部的页面。它的主要优点是更新所需传送的数据最少。当只对页面有很少改动时,更新部分页面显然比再次调用整个页面更好。
ASP.Net中Ajax技术的本质:当浏览器与服务器交互时,ASP.NET Ajax技术可以将浏览器中的部分内容提交,从而避免了将浏览器整个内容提交到服务器。
ASP.NET AJAX包含两个部分:一部分是客户机框架和一系列完全位于客户段的服务;另一部分是服务器端框架。ASP.NET AJAX 的客户端功能主要是提供客户机与服务器进行异步请求通信。
ASP.NET AJAX 服务器控件介绍
1、ScriptManager控件:为需要部分更新的页面提供支持Ajax 的服务器。每个ASP.NET页面都需要一个ScriptManager控件来工作,页面上只能有一个ScriptManager控件。
注意:ASP.NET UpdatePanel、UpdateProgress和Timer控件需要ScriptManager控件才能支持部分页面呈现。
2、ScriptManagerProxy:这个组件用做内容页面的ScriptMananger控件,ScriptManagerProxy控件位于内容页面上,与位于master页面上的ScriptManager控件一起工作。
注意:
当母版页中添加了ScriptManager控件,那么所有使用母板页创建的内容页都支持ASP.NET AJAX功能。如果要在某个内容也中将额外的脚本和服务添加到ScriptManager控件所定义的脚本和服务集合中,此时就必须使用ScriptManagerProxy控件。
ScriptManagerProxy控件的工作方式和ScriptManager控件一样,只是它专用于使用母板页的内容页面。
如果在内容页使用ScriptManagerProxy控件,而在母板页中没有ScriptManager控件,就会出错。
3、Timer:这个控件在指定的时间间隔执行回发,如果将Timer控件用于UpdatePanel控件,则可以按定义的时间间隔启用部分页更新。也可以使用Timer控件来发送整个页面。
Timer控件有两个主要的属性:
1、Interval属性:用于指定回发发生的频率,以毫秒为单位,其默认值为60000毫秒(即60s)
2、Enabled属性:用于打开或关闭Timer,默认为true。
若回发是由Timer控件启动的,则Timer控件将在服务器上引发Tick事件。当也发送到服务器时,可以创建Tick事件处理程序来执行一些操作。
4、UpdatePanel:这个容器控件允许定义页面的某些区域支持使用ScriptManager,之后这些区域就可以回送部分页面,在正常的ASP.NET页面回送过程之外更新它们自己。
注意:
部分更新发生在位于UpdatePanel控件内的部分页。
UpdatePanel控件是一个容器控件,它没有相关的UI项,是引发部分页面回送的方式,仅更新UpdatePanel控件中包含的部分页面。UpdatePanel控件可以嵌套。如果刷新父面板,则也会刷新所有嵌套的面板。
UpdatePanel控件的两个元素,用于定义网页中引发异步回送的触发器。
1、<ContentTemplate>元素:需要在异步回送中改变的内容都应包含在UpdatePanel控件<ContentTemplate>部分中。默认情况下,添加一个UpdatePanel控件,并往UpdatePanel控件中添加其他控件事,会自动生成<ContentTemplate></ContentTemplate>,也就是实现和触发Ajax的控件都在<ContentTemplate></ContentTemplate></ContentTemplate>
2、<Triggers>元素:由于标签和按钮控件都包含在UpdatePanel控件<ContentTemplate></ContentTemplate>部分中,当发生异步回送时,不仅回送了标签控件的内容,同时回送了按钮的所有代码,这增加了网络传输的异步请求和响应的数据量。理想的情况是UpdatePanel控件<ContentTemplate></ContentTemplate>中只包含实现更新的控件,不包含触发控件。也就是只包含标签控件,不包含按钮控件。这时候,<Triggers>就派上用场了。
<Triggers>元素有两个控件:AsyncPostBackTrigger和PostBackTrigger。PostBackTrigger会进行完整页面的回送,而AsyncPostBackTrigger仅执行异步回送。为UpdatePanel控件添加<Triggers>元素,<Triggers>元素中包含一个AsyncPostBackTrigger控件,该控件的ControlID设置为按钮的ID,EventName属性设置为按钮的事件名,这样就将按钮控件与异步回送的触发器关联起来了。
5、UpdateProgress:这个控件允许给终端用户显示一个可视化元素,说明部分页面回送操作正在更新页面的某些部分。这是长时间运行Ajax更新的显示进度的理想控件。
UpdateProgress控件可以为客户机提供一个可视化的指示器,显示部分更新的进度情况。
在一个页面上也可以使用多个UpdateProgress控件。通过设置进度控件的AssociatedUpdatePanelID属性,可以是UpdateProgress控件与单个UpdatePanel控件关联。在这种情况下,仅当回发源自关联的UpdatePanel控件内部时,UPdateProgress控件才显示消息。
UpdateProgress控件也是一个模板控件,他只是有一个子元素<ProgressTemplate>,在触发UpdateProgress控件时,放在这个元素的内容就会呈现出来。
在ASP.NET页面中使用AJAX的方法:
在VS2008中的工具箱中的Ajax Extensions组中,选择ScriptManager控件添加到页面;然后,选择UpdatePanel控件添加到页面适当位置。然后将需要刷新的控件和触发该刷新的控件放在UpdatePanel控件中,也就是说部分刷新的控件是需要放在UpdatePanel控件中。然后编写触发Ajax的事件代码。