ASP.NET AJAX简明教程
当我们谈论Ajax时,首先想到的就是JavaScript下的Ajax,用来完成网页的交互,局部刷新工作,Microsoft的ASP.NET AJAX框架在Web的开发中承担着类似的角色,并简化了JavaScript中的Ajax的操作。
Microsoft的ASP.NET AJAX框架,整合了客户端脚本库和服务器的开发框架,基于.NET平台和Visual Studio开发工具来创建具有良好用户体验的Web页面和服务器端的页面。
ASP.NET AJAX框架的结构体系:
1.客户端
ASP.NET AJAX是可扩展的,完全面向对象的JavaScript客户端脚本框架,允许开发者在JavaScript脚本中非常容易地调用Web Service。包含兼容IE,Firefox,Safari,Chrome等浏览器的浏览器兼容层,扩展了JavaScript的核心服务,丰富组件的基础类库,以及用来管理Web服务,应用程序通信,异步远程方法调用的网络层。
2.服务器端
ASP.NET AJAX服务器端集成了对异步客户端回调的脚本支持,Web Service的调用和实现基本AJAX应用的服务器端控件;
ASP.NET AJAX框架包含了ScriptManager,UpdatePanel,UpdaProgress和Timer四个核心的服务器端控件,核心控件之间的关系可以用下图来描述:

下面具体介绍各个控件的使用方法:
1.ScriptManager控件:
ScriptManager是ASP.NET AJAX的运行基础,用来处理页面上的所有AJAX组件,注册JavaScript脚本,注册Web Service,在AJAX的开发中,ScriptManager是必须的,且有且仅有一个。
ScriptManager的内部标签有:
<Scripts>
<asp:ScriptReference Path=""></asp:ScriptReference>
</Scripts>
用来注册外部的脚本文件;
<Services>
<asp:ServiceReference Path=""></asp:ServiceReference>
<Services />
用来注册Web Service;
在JavaScript中调用Web Service要经历创建Web Service,在客户端注册Web Service,在JavaScript中引用Web Service中的方法三个步骤。
下面给出一个调用Web Service的简单示例:
<script type="text/javascript">
//为什么要以这种方式调用Web Service的方法;
function myButton1_onClick() {
AjaxService.Greet(show);
} function show(result) {
alert(result);
}
</script>
<div>
<%--注册服务器端的ScriptManager控件;--%>
<asp:ScriptManager ID="myScriptManager" runat="server" >
<Services>
<asp:ServiceReference Path="~/AjaxService.asmx" />
</Services>
</asp:ScriptManager>
</div> <%-- 调用Web Service;--%>
<div class="WebServiceDemo">
<p>This is a example about the Web Service!</p>
<input type="button" name="myButton1" value="获取Web服务" onclick="myButton1_onClick();"/>
</div><br /><br /><br />
[WebService(Namespace = "http://tempuri.org/")]
[WebServiceBinding(ConformsTo = WsiProfiles.BasicProfile1_1)]
// To allow this Web Service to be called from script, using ASP.NET AJAX, uncomment the following line.
[System.Web.Script.Services.ScriptService]
public class AjaxService : System.Web.Services.WebService { public AjaxService () {
} [WebMethod]
public string Greet()
{
return "Hello Ajax!";
}
}
注:至于为什么要在JavaScript脚本中使用那样的调用方法,我也不知道,等待更新……
2.UpdatePanel和UpdateProgress控件:
UpdatePanel控件是服务器端的控件,用来创建实现局部更新的Web应用程序,强大之处在于不需要写任何JavaScript脚本就能够实现页面的局部更新;
UpdatePanel的属性之中最重要的是UpdateMode,即更新模式,有Always和Conditional两个值,当值为Conditional时,只有触发注册到该UpdatePanel上的控件时才会局部更新页面,否则的话,只要.aspx页面中包含两个或两个以上的UpdatePanel,有一个进行局部更新,其他的都会随之更新;(这个现象可以在运行整个项目Demo时发现!);
UpdatePanel控件的内部标签有:
<ContentTemplate>
在这里添加需要局部更新的ASP.NET服务器端控件;
注:如果希望UpdateProgress能够正常显示,该UpdatePanel绑定的触发器控件也要在这里定义!
</ContentTemplate>
<Triggers />包含<asp:AsyncPostBackTrigger />内部标签,用于异步局部更新页面。<asp:AsyncPostBackTrigger />有ControlID和EventName两个属性,其中ControlID用来设置用于触发异步回传控件的ID,如Button控件,EventName用来设置当触发绑定控件的什么事件时开始异步回传,局部更新页面,如Button的“Click”事件。
UpdateProgress控件绑定于一个或多个UpdatePanel控件,用来显示UpdatePanel控件局部更新页面的过程信息。
UpdateProgress控件的重要属性有AssociatedUpdatePanelID和DisplayAfter两个,AssociatedUpdatePanelID用来设置UpdateProgress控件绑定的UpdatePanel控件的ID,DisplayAfter用来设置UpdateProgress控件延迟显示的毫秒数。
UpdateProgress控件的内部标签有:
<ProgressTemplate>
在这里添加显示状态信息的ASP.NET控件或者文本;
</ProgressTemplate>
注:如果没有定义UpdatePanel控件,就使用UpdateProgress控件,在调试的过程中会报错。
下面给出一个使用UpdatePanel和UpdateProgress控件的简单示例:
<div class="UpdatePanelandUpdateProgressDemo">
<p>This is a example about the UpdatePanel and UpdateProgress!</p>
<div>
初始时间:<asp:Label ID="Label1" runat="server"></asp:Label><br />
</div> <asp:UpdatePanel ID="myUpdatePanel" runat="server" UpdateMode="Conditional">
<%--把需要局部跟新的控件内容添加到该区域;--%>
<ContentTemplate>
当前时间:<asp:Label ID="Label2" runat="server"></asp:Label><br />
<%--当<asp:Button />控件在<ContentTemplate />外部时,<asp:UpdateProgress />控件无法正常显示,
但是 <asp:UpdatePanel />可以正常使用;--%>
<asp:Button ID="myButton2" Text="使用UpdatePanel局部更新页面" runat="server" OnClick="myButton2_OnClick"/>
</ContentTemplate>
<Triggers>
<asp:AsyncPostBackTrigger ControlID="myButton2" EventName="Click"/>
</Triggers>
</asp:UpdatePanel> <asp:UpdateProgress ID="myUpdateProgress" AssociatedUpdatePanelID="myUpdatePanel" runat="server">
<ProgressTemplate>
<asp:Label ID="Label3" Text="正在更新数据,请等待……" runat="server"></asp:Label>
</ProgressTemplate>
</asp:UpdateProgress>
</div><br /><br />
protected void Page_Load(object sender, EventArgs e)
{
Label1.Text = DateTime.Now.ToString();
Label2.Text = DateTime.Now.ToString();
} public void myButton2_OnClick(object sender, EventArgs e)
{
Label2.Text = DateTime.Now.ToString();
System.Threading.Thread.Sleep();
//无法以下面的方式添加HTML标签;
//Response.Write("<p>This is a example about the UpdatePanel!</p>");
}
3.Timer控件:
Timer计时器控件,用来实现经过一段时间间隔刷新页面的功能。Timer控件能够定时触发整个页面回送,当它与UpdatePanel结合使用时可以定时触发异步回送并局部刷新UpdatePanel控件的内容。
Timer控件的重要属性有Interval和onTick,Interval用来设置刷新的时间间隔,onTick用来设置一个处理程序来执行页面回送服务器时执行的请求。Timer处在UpdatePanel控件外部时刷新整个页面, 处在UpdatePanel控件内部是执行局部刷新;Timer控件处在UpdatePanel控件的内外部也会影响到JavaScript计时器组件的计时操作,读者自行探索,不在详述。
下面给出一个使用Timer控件的简单示例:
<div class="TimerDemo">
<p>This is a example about the Timer!</p>
<%--当添加两个或两个以上的UpdatePanel时通过设置UpdateMode属性来阻止UpdatePanel同时全部刷新;--%>
<asp:UpdatePanel ID="myUpdatePanel2" runat="server" UpdateMode="Conditional">
<ContentTemplate>
<asp:Image ID="myImage" runat="server" AlternateText="myImage" ImageAlign="Left" ImageUrl="images/image1.jpg"/>
<asp:Timer ID="myTimer" runat="server" Interval="2000" OnTick="myTimer_OnTick"></asp:Timer>
</ContentTemplate>
</asp:UpdatePanel>
</div>
public void myTimer_OnTick(object sender, EventArgs e)
{
Random r = new Random();
int i = r.Next() + ;
myImage.ImageUrl = "images/image" + i + ".jpg";
}
4.ASP.NET AJAX Control Toolkit
我还没使用过,个人感觉是一个类似jQuery UI 的控件库,详细的介绍参考:http://asp.net/ajax/downloads/default.aspx。
到此ASP.NET AJAX简明教程就结束了,希望给遇到困惑的读者一点启发。完整的示例下载访问:链接: http://pan.baidu.com/s/1hqqvFtM 密码: pwq5。
参考文献:
[1] ASP.NET 4.0(C#)实用教程,张玉兰编著,2012-10,北京,清华大学出版社。
[2] ASP.NET 3.5(C#)实用教程,王辉等编著,2010-08,北京,清华大学出版社。
本文历史:
- 2014-12-24 初稿完成。
ASP.NET AJAX简明教程的更多相关文章
- OAuth 白话简明教程 1.简述
转自:http://www.cftea.com/c/2016/11/6702.asp OAuth 白话简明教程 1.简述 OAuth 白话简明教程 2.授权码模式(Authorization Code ...
- OAuth 白话简明教程 2.授权码模式(Authorization Code)
转自:http://www.cftea.com/c/2016/11/6703.asp OAuth 白话简明教程 1.简述 OAuth 白话简明教程 2.授权码模式(Authorization Code ...
- OAuth 白话简明教程 3.客户端模式(Client Credentials)
转自:http://www.cftea.com/c/2016/11/6704.asp OAuth 白话简明教程 1.简述 OAuth 白话简明教程 2.授权码模式(Authorization Code ...
- OAuth 白话简明教程 4.刷新 Access Token
转自:http://www.cftea.com/c/2016/11/6705.asp OAuth 白话简明教程 1.简述 OAuth 白话简明教程 2.授权码模式(Authorization Code ...
- OAuth 白话简明教程 5.其他模式
转自:http://www.cftea.com/c/2016/11/6706.asp OAuth 白话简明教程 1.简述 OAuth 白话简明教程 2.授权码模式(Authorization Code ...
- 系列文章--ASP.NET之AJAX入门教程
ASP.NET AJAX入门系列将会写关于ASP.NET AJAX一些控件的使用方法以及基础知识,其中部分文章为原创,也有一些文章是直接翻译自官方文档,本部分内容会不断更新. 目录 ASP.NET A ...
- ASP.NET MVC案例教程(基于ASP.NET MVC beta)——第五篇:MVC整合Ajax
摘要 本文将从完成“输入数据验证”这个功能出发,逐渐展开ASP.NET MVC与Ajax结合的方法.首先,本文将使用ASP.NET MVC提供的同步方式完成数据验证.而后,将分别结合ASP. ...
- HTML简明教程(二)
HTML简明教程(二) 一.HTML 图像 二.HTML 表格 三.HTML 列表 四.HTML div和 span 五.HTML 布局 六.HTML 表单和输入 七.HTML 框架 八.HTML内联 ...
- HTML简明教程(一)
HTML简明教程(一) 内容主体来自:W3School 一.HTML 简介 二.HTML 基础 三.HTML 元素 四.HTML 属性 五.HTML 标题 六.HTML 段落 七.HTML 文本格式化 ...
随机推荐
- uml 9图不同的角度品种分类
只要阅读uml视频后为其9一些模糊样图或理解.话又说回来后来他们自己的系统看着笔记,统的了解.以下分别从两个不同的角度对uml中9种图进行理解以及当中某些图的区分,本人比較菜,有些不完好的地方欢迎提出 ...
- PHP情人:p十几天来学习hp第一天
我这里是暂时的 Apache web server 和 MY SQL 如WEB,在php-4.3.3下的环境做的程序.当然要简单的构建和訪问查看数据库 PHPMYADMIN 不可少. 以下简介一下P ...
- Uva 10131 Is Bigger Smarter? (LIS,打印路径)
option=com_onlinejudge&Itemid=8&page=show_problem&problem=1072">链接:UVa 10131 题意: ...
- Android - 用Fragments实现动态UI - 和其他Fragments通信
为了重用Fragment UI组件,应该把每个都设计为它自有的模块组件并且有自己的布局和行为.一旦定义了这些可重用的Fragment,你可以把它们和一个activity关联然后和程序的逻辑一起实现上层 ...
- Palindromes _easy version
Time Limit: 1Sec MemoryLimit: 64 MB Submit:165 Solved: 76 [Submit][Status][WebBoard] Description & ...
- linuxIO刷新机制fsync和fdatasync详细解释
前言: Linux,unix在内核中设有 缓冲区快速缓冲或页面快速缓冲.大多数磁盘I/O都通过缓冲进行,採用延迟写技术. sync:将全部改动过的快缓存区排入写队列.然后返回.并不等待实际写磁盘操作结 ...
- Session小案例------完成用户登录
Session小案例------完成用户登录 在项目开发中,用户登陆功能再平常只是啦,当用户完毕username和password校验后.进入主界面,须要在主界面中显示用户的信息,此时用ses ...
- SSL探03
本文探讨了Openssl的Engine机械.Openssl硬件引擎(Engine)可以使用户比較easy地将自己的硬件增加到openssl中去,替换其提供的软件算法. ENGINE 是 OPENSSL ...
- combobox自己主动提示组件加入无选中项清空功能
这个标题非常绕口,只是这也是想了半天的成果,对不起体育老师了. 标题想表达的是:之前讲过的用combobox实现自己主动提示组件.只是如今规定该组件不能够保存data中不存在的数据. 最初的想法是通过 ...
- NET功能集
NET功能集 目录 1. ObsoleteAttribute2. 设置默认值属性: DefaultValueAttribute3. DebuggerBrowsableAttribute4. ??运算符 ...