日期:2011-01-23 浏览次数:20353 次
从一开始,开发人员便受制于web的无固定状态这一特性。也就是,一旦某个页面被请求并加载,客户端到服务器端的连接便一直持续。AJAX动作将焦点集中于XMLHTTP对象,这个对象使得服务器间的通讯成为可能。最新版的ASP.NET(2.0)提供了自己的方式来获取服务器请求,不再要求用户参与。
无法连接
几年来,人们提出各种各样的方法来规避web应用中的无固定状态局限。主要的方法是减少页面请求或重载的数量,以避免影响用户感觉。例如,很多开发人员使用隐藏框架作为数据源,这样数据就可以很简单的发送或接收,另外,一些开发人员也选择一开始加载所有需要加载项,从而后续页面加载量就减少了。但是,在必须请求服务器端调用时就会出现问题,从而引进了AJAX组技术。AJAX利用XMLHTTP对象以及XML和客户端脚本(如javascript)来处理异步服务器调用。
ASP.NET模型
当页面被用户请求时,ASP.NET页面的默认行为开始发生并在请求的客户端加载。用户通过诸如单击按钮等各种动作来和页面进行交互。这些动作可能触发一个称为postback的服务器端调用(例如,作为动作的结果返回给请求主机的页面是重新加载的该页面的更新版)
页面返回是要付出代价的。例如,可能会丢失客户端状态,以及在和服务器通讯时可能会影响用户体验因为他们要等待通讯和页面重载。AJAX方法通过使用一台服务器辅助异步通讯来解决这些问题,且不会影响用户体验。一个类似的方法可以通过使用ASP.NET 2.0的ICallbackEventHandler接口实现。
实现callback
callback是一个结合了某个特定的用户接口对象的函数。它执行某个动作作为对对象事件的反应。事件可以是大量鼠标单击或者其他事件中的任何一个。
在ASP.NET 2.0中实现callbacks和标准web页中实现有些差异。下面列出了需要在页面代码中修改的地方:
1 、页面必须实现ICallbackEventHandler接口。
2 、页面必须实现ICallbackEventHandler接口的RaiseCallbackEvent方法,在服务器上调用这个方法执行callback函数。
3 、页面必须实现ICallbackEventHandler接口的GetCallbackResult方法,这个方法将把callback函数的执行结果返回给客户端。
经过了以上代码修改,就可以在客户端页面(HTML源代码)使用callback函数。页面必须包括客户端函数以用来执行实际的服务器请求以及接收服务器请求的返回结果。
<%@ Page Language="C#" %>
<%@ Implements Interface="System.Web.UI.ICallbackEventHandler" %>
<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.0 Transitional//EN" >
<html><head>
<title>ASP.NET Callback</title>
<script language="C#" runat="server">
void Page_Load(object sender, EventArgs e) {
String callbackRef;
String callbackScript;
callbackRef= Page.ClientScript.GetCallbackEventReference(this,"arg","GetData","");
callbackScript = "function CallServer(arg, context) {" + callbackRef + "; }";
Page.ClientScript.RegisterClientScriptBlock(this.GetType(), "CallServer", callbackScript, true);
}
public string GetCallbackResult() {
return "The current time is: " + DateNow.ToString();
}
public void RaiseCallbackEvent(String eventArgument) {
}
</script>
<script type="text/javascript">
function GetData(arg, context) {
Results.innerText = '';
}
</script></head><body>
<form id="frmCallback" name="frmCallback" runat="server">
<input type="button" value="Callback" />
<br><span id="Results"></span>
</form></body></html>
中的C#页提供了实现callback的一个实例。下面是部分代码说明:
1、该页面中的Page_load事件通过页面的ClientScript属性中的GetCallbackEventReference方法设定一个对callback函数的引用。这个方法可以接受这些参数:对页面的引用;传递数据的参数名;接收callback数据的客户端函数名;传递你想要得到的任何环境变量的参数名,在本例中,这个环境变量未使用。
2、包含的引用函数用来创建用于调用服务器的函数(在本例中为callbackScript变量)。当然,被生成函数接受的参数名必须和传递给GetCallbackEventReference方法的名字相匹配。最后,callback脚本必须通过页面对象ClientScript属性中的RegisterClientScriptBlock方法进行注册。
3、GetCallbackResult方法提供callback函数返回的输入结果。本例中服务器上的当前数据和时间被返回。
4、 接收callbacks的客户端函数在页面的头部被加载(本例中为GetData)。这个函数名必须和传递给GetCallbackEventReference方法的相匹配。该函数接收两个字符串值作为返回值和一个可选第二值作为由服务器返回的环境变量值。
5 、页面中的按钮和callback函数相关联。在本例中,HTML的span对象接收callback返回结果。
顺畅的用户体验
避免页面重载简化用户体验减少客户端和服务器端的数据传输量。你可以使用AJAX方法提供这个功能。你还可以使用ASP.NET 2.0的callback函数提供支持。这些技术的应用是多方面的,总之,任何提高用户体验的改进都是对业务有益的。