当我们谈论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.UpdatePanelUpdateProgress控件:

  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简明教程的更多相关文章

  1. OAuth 白话简明教程 1.简述

    转自:http://www.cftea.com/c/2016/11/6702.asp OAuth 白话简明教程 1.简述 OAuth 白话简明教程 2.授权码模式(Authorization Code ...

  2. OAuth 白话简明教程 2.授权码模式(Authorization Code)

    转自:http://www.cftea.com/c/2016/11/6703.asp OAuth 白话简明教程 1.简述 OAuth 白话简明教程 2.授权码模式(Authorization Code ...

  3. OAuth 白话简明教程 3.客户端模式(Client Credentials)

    转自:http://www.cftea.com/c/2016/11/6704.asp OAuth 白话简明教程 1.简述 OAuth 白话简明教程 2.授权码模式(Authorization Code ...

  4. OAuth 白话简明教程 4.刷新 Access Token

    转自:http://www.cftea.com/c/2016/11/6705.asp OAuth 白话简明教程 1.简述 OAuth 白话简明教程 2.授权码模式(Authorization Code ...

  5. OAuth 白话简明教程 5.其他模式

    转自:http://www.cftea.com/c/2016/11/6706.asp OAuth 白话简明教程 1.简述 OAuth 白话简明教程 2.授权码模式(Authorization Code ...

  6. 系列文章--ASP.NET之AJAX入门教程

    ASP.NET AJAX入门系列将会写关于ASP.NET AJAX一些控件的使用方法以及基础知识,其中部分文章为原创,也有一些文章是直接翻译自官方文档,本部分内容会不断更新. 目录 ASP.NET A ...

  7. ASP.NET MVC案例教程(基于ASP.NET MVC beta)——第五篇:MVC整合Ajax

    摘要      本文将从完成“输入数据验证”这个功能出发,逐渐展开ASP.NET MVC与Ajax结合的方法.首先,本文将使用ASP.NET MVC提供的同步方式完成数据验证.而后,将分别结合ASP. ...

  8. HTML简明教程(二)

    HTML简明教程(二) 一.HTML 图像 二.HTML 表格 三.HTML 列表 四.HTML div和 span 五.HTML 布局 六.HTML 表单和输入 七.HTML 框架 八.HTML内联 ...

  9. HTML简明教程(一)

    HTML简明教程(一) 内容主体来自:W3School 一.HTML 简介 二.HTML 基础 三.HTML 元素 四.HTML 属性 五.HTML 标题 六.HTML 段落 七.HTML 文本格式化 ...

随机推荐

  1. mysql table is marked as crashed and last (automatic?) repair failed

    1.同事的服务器在mysqldump备份的时候报错了 这个原因是myisam的表数据太多,在某个时刻, 存放数据的这个MyISAM表数据急速长大. 比如一些log表, 当硬盘写满了.这个时候还在继续写 ...

  2. 冒泡排序java

    先对冒泡排序做一个简单的解释,然后是代码的实现.解释出资<java的数据结构和算法>,大家可以看看. 排序类: package com.dxx.order; public class Bu ...

  3. 【原创】leetCodeOj --- Find Minimum in Rotated Sorted Array II 解题报告

    题目地址: https://oj.leetcode.com/problems/find-minimum-in-rotated-sorted-array-ii/ 题目内容: Suppose a sort ...

  4. Agile/CMMI/Scrum

    Agile/CMMI/Scrum 一.背景介绍 在朋友(aehyok)的建议下,初步去了解Visual Studio Online,简称VS Online(即原来的 Team Foundation S ...

  5. json学习初体验--第三者jar包实现bean、List、map创json格式

    1.的需要jar包裹json-lib.jar 下载链接: http://sourceforge.net/projects/json-lib/files/json-lib/ 此包还须要下面的依赖包, c ...

  6. OpenCV面、人眼检测

    /* 功能:实现对眼睛.脸部的跟踪. 版本号:1.0 时间:2014-4-27 */ #include <opencv2/objdetect/objdetect.hpp> #include ...

  7. 【Web探索之旅】第二部分第三课:框架和内容管理系统

    内容简介 1.第二部分第三课:框架和内容管理系统 2.第二部分第四课预告:数据库   第二部分第三课:框架和内容管理系统 上一课我们介绍了服务器端的编程语言,有PHP,Java,Python,Ruby ...

  8. C++使用对象指针

    //定义结构 Box.h: #ifndef BOX_H #define BOX_H struct Box{ double length; double width; double height; do ...

  9. Nova创建虚拟机的底层代码分析

    作为个人学习笔记分享.有不论什么问题欢迎交流! 在openstack中创建虚拟机的底层实现是nova使用了libvirt,代码在nova/virt/libvirt/driver.py. #image_ ...

  10. quick-cocos2d-x游戏开发【3】——display.newSprite创建向导

    游戏嘛.没有图片没有图片可以称为你的游戏,所以,我们看一下使用quick如何创建精灵的方式. quick的api精灵族的创造仍然是非常具体的解释.因此,建立非常easy. display.newSpr ...