采用ASP.NET 2.0的Callback机制构建轻量级的AJAX架构
点击次数:18 次 发布日期:2008-11-26 09:55:20 作者:源代码网
|
源代码网推荐 源代码网推荐 目前我们构建一个AJAX的应用主要有两种方法。 源代码网推荐 源代码网推荐 1. 采用成熟的AJAX架构(例如 AJAX.net、微软的Atlas)。 源代码网推荐 源代码网推荐 2. 就是自己根据具体的应用自己写。 源代码网推荐 源代码网推荐 以下是两种方法的简单比较: 源代码网推荐 源代码网推荐 采用成熟的AJAX架构 源代码网推荐 优点:周期短,简单方便,功能强大 源代码网推荐 源代码网推荐 缺点:需要付出一定的学习成本,不够灵活,页面加载代码庞大 源代码网推荐 源代码网推荐 自己写具体的应用 源代码网推荐 优点:灵活,控制力强。前端界面代码简洁 源代码网推荐 源代码网推荐 缺点:重用度低,开发周期长。要熟悉AJAX涉及的各部分知识。 源代码网推荐 源代码网推荐 源代码网推荐 微软ASP.NET 2.0对AJAX部分功能进行了封装,提出新的客户端回调功能Callback机制,来实现页面的异步调用和无刷新显示。我们可否对其进一步的封装来实现一个简洁、灵活、不必付出多少学习成本易用的轻量级AJAX架构呢? 源代码网推荐 源代码网推荐 下图是我们要构建的轻量级AJAX架构的封装范围。 源代码网推荐 源代码网推荐
源代码网推荐 我们将从以下三个方面进行封装: 源代码网推荐 源代码网推荐 1. 服务端对请求的响应,数据的检索 源代码网推荐 源代码网推荐 2. 客户端请求数据的构建 源代码网推荐 源代码网推荐 3. 客户端数据的检索 源代码网推荐 源代码网推荐 在封装之前我们需要对请求和响应的数据进行抽象定义。 源代码网推荐 源代码网推荐 请求和响应的容器(AjaxMsgData) 源代码网推荐 这是一个标准请求和响应数据的承载者,可以包含其他数据类型。例如包含实体,包含集合等等 源代码网推荐 源代码网推荐 简单的数据类型 源代码网推荐 只一个或者单个基本数据类型的值(例如 string,int) 源代码网推荐 源代码网推荐 复杂的实体数据类型(AjaxData) 源代码网推荐 一系列具有关系的单个或者复合数据的封装对应业务中的实体对象 源代码网推荐 源代码网推荐 实体集合 源代码网推荐 源代码网推荐 源代码网推荐 异常 (AjaxErrData) 源代码网推荐 表示数据操作的结果,失败或者成功,及其信息说明 源代码网推荐 源代码网推荐 源代码网推荐 所有这些数据对象都应该可以xml对象互相转化。每一个数据又分成客户端对象和服务端对象,并且客户端对象和服务端对象接口和名称完全一致。 源代码网推荐
源代码网推荐 1. 使用模板方式对服务端Callback机制进行封装 源代码网推荐
源代码网推荐 public abstract class CallbackPage : System.Web.UI.Page, ICallbackEventHandler 源代码网推荐 { 源代码网推荐 string backStr = ""; 源代码网推荐 protected void basePage_Load(object sender, EventArgs e) 源代码网推荐 { 源代码网推荐 源代码网推荐 ClientScriptManager cm = Page.ClientScript; 源代码网推荐 String cbRef = cm.GetCallbackEventReference(this, "arg", "ReceiveServerData", "context"); 源代码网推荐 string strCallback = "function CallServer(arg,context) {" + cbRef + "}"; 源代码网推荐 cm.RegisterClientScriptBlock(this.GetType(), "CallServer", strCallback, true); 源代码网推荐 源代码网推荐 } 源代码网推荐 源代码网推荐 override protected void OnInit(EventArgs e) 源代码网推荐 { 源代码网推荐 this.Load+=new EventHandler(basePage_Load); 源代码网推荐 源代码网推荐 base.OnInit(e); 源代码网推荐 } 源代码网推荐 源代码网推荐 ICallbackEventHandler 成员#region ICallbackEventHandler 成员 源代码网推荐 源代码网推荐 public string GetCallbackResult() 源代码网推荐 { 源代码网推荐 return backStr; 源代码网推荐 } 源代码网推荐 源代码网推荐 public void RaiseCallbackEvent(string eventArgument) 源代码网推荐 { 源代码网推荐 System.Xml.XmlDocument doc = new System.Xml.XmlDocument(); 源代码网推荐 doc.LoadXml(eventArgument); 源代码网推荐 AjaxMsgData msg = new AjaxMsgData(doc.DocumentElement); 源代码网推荐 backStr = CallBackPress(msg).GetObjXml(null).OuterXml; 源代码网推荐 源代码网推荐 } 源代码网推荐 public abstract AjaxMsgData CallBackPress(AjaxMsgData msg); 源代码网推荐 源代码网推荐 #endregion 源代码网推荐 } 源代码网推荐 源代码网推荐 源代码网推荐 2. 使用连接器方式将客户端和服务端消息连接 源代码网推荐 源代码网推荐 源代码网推荐
源代码网推荐 应用举例:一个简单的用户登录 源代码网推荐 源代码网推荐 源代码网推荐 源代码网推荐 客户端代码: 源代码网推荐 源代码网推荐 <%@ Page Language="C#" AutoEventWireup="true" CodeBehind="Default.aspx.cs" Inherits="WebApplication1._Default" %> 源代码网推荐 源代码网推荐 源代码网推荐 源代码网推荐 <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd"> 源代码网推荐 源代码网推荐 源代码网推荐 源代码网推荐 <html xmlns="http://www.w3.org/1999/xhtml" > 源代码网推荐 源代码网推荐 <head runat="server"> 源代码网推荐 源代码网推荐 <title>无标题页</title> 源代码网推荐 源代码网推荐 <script language="javascript" src="http://www.zzchn.com/edu/20080727/ajax.js"></script> 源代码网推荐 源代码网推荐 <script type="text/javascript"> 源代码网推荐 源代码网推荐 function login() 源代码网推荐 源代码网推荐 { 源代码网推荐 源代码网推荐 var msg=new AjaxMsgData(); 源代码网推荐 源代码网推荐 msg.WorkID="Login"; 源代码网推荐 源代码网推荐 msg.Datas["Name"]=$("TextBox1").value; 源代码网推荐 源代码网推荐 msg.Datas["Pass"]==$("TextBox2").value; 源代码网推荐 源代码网推荐 var str=msg.toXmlString(); 源代码网推荐 源代码网推荐 CallServer(str,""); 源代码网推荐 源代码网推荐 //alert(str); 源代码网推荐 源代码网推荐 源代码网推荐 源代码网推荐 } 源代码网推荐 源代码网推荐 源代码网推荐 源代码网推荐 function ReceiveServerData(arg, context) 源代码网推荐 源代码网推荐 { 源代码网推荐 源代码网推荐 // alert(s); 源代码网推荐 源代码网推荐 var msg1=GetMsg(arg); 源代码网推荐 源代码网推荐 alert(msg1.Err.Msg); 源代码网推荐 源代码网推荐 源代码网推荐 源代码网推荐 源代码网推荐 源代码网推荐 } 源代码网推荐 源代码网推荐 </script> 源代码网推荐 源代码网推荐 </head> 源代码网推荐 源代码网推荐 <body> 源代码网推荐 源代码网推荐 <form id="form1" runat="server"> 源代码网推荐 源代码网推荐 <div> 源代码网推荐 源代码网推荐 用户名称:<asp:TextBox ID="TextBox1" runat="server"></asp:TextBox><br /> 源代码网推荐 源代码网推荐 <br /> 源代码网推荐 源代码网推荐 密码: <asp:TextBox ID="TextBox2" runat="server"></asp:TextBox><br /> 源代码网推荐 源代码网推荐 <br /> 源代码网推荐 源代码网推荐 <input id="Button1" type="button" value="登录" onclick="login()" /> <br /> 源代码网推荐 源代码网推荐 源代码网推荐 源代码网推荐 </div> 源代码网推荐 源代码网推荐 </form> 源代码网推荐 源代码网推荐 </body> 源代码网推荐 源代码网推荐 </html> 源代码网推荐 源代码网推荐 源代码网推荐 源代码网推荐 源代码网推荐 源代码网推荐 服务端代码: 源代码网推荐 源代码网推荐 public partial class _Default : CallbackPage 源代码网推荐 源代码网推荐 { 源代码网推荐 源代码网推荐 public override AjaxMsgData CallBackPress(AjaxMsgData msg) 源代码网推荐 源代码网推荐 { 源代码网推荐 源代码网推荐 if (msg.Datas["Name"].ToString() == "zyg") 源代码网推荐 源代码网推荐 msg.Err.Msg = "用户登录成功"; 源代码网推荐 源代码网推荐 return msg; 源代码网推荐 源代码网推荐 } 源代码网推荐 源代码网推荐 } 源代码网推荐 源代码网推荐 源代码网推荐 源代码网推荐 哈! Ajax 的应用是不是变得简单了 源代码网推荐 做人要厚道,请注明转自酷网动力(www.ASPCOOL.COM)。 源代码网推荐 源代码网供稿. |
