前几天曾经发过一篇《ASP.NET AJAX(Atlas)和Anthem.NET——管中窥豹般小小比较》,Jeffrey Zhao说用ASP.NET AJAX中的UpdatePanel彷佛不大好。我想了想确实如此,有些高射炮打蚊子的感受。还有朋友但愿我也能在比较中关照一下Ajax.NET Professional——一样是个ASP.NET平台上很是优秀的Ajax框架。html
种种要求下,造成此文。本文将比较在ASP.NET AJAX(Atlas)、Anthem.NET和Ajax.NET Professional这三个知名ASP.NET上Ajax框架中实现客户端调用服务器端方法的实现。客户端调用服务器端方法是每个Ajax框架都必须考虑的问题,很是具备表明性。在程序编写过程当中,我也将抛弃掉某些框架中提供的“智能的”服务器端控件(例如ASP.NET AJAX的UpdatePanel),而彻底用手工JavaScript和C#实现,力求创造出较为“公平”的比较环境。ajax
因为本文侧重于“比较”,而不是“介绍”,因此对于基础知识都一笔带过。有须要详细了解程序实现,或是但愿重现实验结果的朋友,能够下载本文附带的代码。浏览器
程序要实现的功能服务器
程序功能很简单,却也足够典型:框架
程序运行界面函数
因为这三个程序的界面、行为以及实现功能都彻底一致,因此这里仅以ASP.NET AJAX(Atlas)版本的为例。下面是程序初始化以后的界面:post
点击按钮,上面介绍的5个步骤将依次执行,最终获得以下图所示的结果,显示出服务器端时间:this
ASP.NET AJAX(Atlas)版本的实现代码spa
首先是页面的HTML部分,注意ASP.NET AJAX(Atlas)独有的ScriptManager控件:code
<asp:ScriptManager ID="ScriptManager1" runat="server" />
<div>
<input type="button" value="Get Server Time" id="btnGetServerTime" onclick="return btnGetServerTime_onclick()" />
<span id="result" />
</div>
而后是客户端JavaScript部分,注意用PageMethods.GetServerTime()这样的形式调用服务器端方法:
function btnGetServerTime_onclick() {
PageMethods.GetServerTime(cb_getServerTime);
}
function cb_getServerTime(result) {
document.getElementById("result").innerHTML = result;
}
服务器端代码以下,注意方法必须为静态,且添加[System.Web.Services.WebMethod]和[Microsoft.Web.Script.Services.ScriptMethod]两个属性:
[System.Web.Services.WebMethod]
[Microsoft.Web.Script.Services.ScriptMethod]
public static string GetServerTime()
{
return DateTime.Now.ToString();
}
OK!
Anthem.NET版本的实现代码
首先是页面的HTML部分,没什么过多须要注意的:
<div>
<input type="button" value="Get Server Time" id="btnGetServerTime" onclick="return btnGetServerTime_onclick()" />
<span id="result" />
</div>
客户端JavaScript部分,注意用Anthem_InvokePageMethod辅助函数调用服务器端方法:
function btnGetServerTime_onclick() {
Anthem_InvokePageMethod("GetServerTime", [], cb_getServerTime);
}
function cb_getServerTime(result) {
document.getElementById("result").innerHTML = result.value;
}
最后是服务器端代码,注意Page_Load中要注册一下(与ASP.NET AJAX中的ScriptManager有殊途同归之妙)。还有方法应用了[Anthem.Method]属性:
[Anthem.Method]
public string GetServerTime()
{
return DateTime.Now.ToString();
}
protected void Page_Load(object sender, EventArgs e)
{
Anthem.Manager.Register(this);
}
OK!
Ajax.NET Professional版本的实现代码
页面的HTML部分和Anthem.NET版本的彻底一致:
<div>
<input type="button" value="Get Server Time" id="btnGetServerTime" onclick="return btnGetServerTime_onclick()" />
<span id="result" />
</div>
客户端JavaScript部分倒于与ASP.NET AJAX得有几分神似,注意“ASP.ajaxpro_aspx”这个东西为本ASP.NET页面编译后的类名:
function btnGetServerTime_onclick() {
ASP.ajaxpro_aspx.GetServerTime(cb_getServerTime);
}
function cb_getServerTime(result) {
document.getElementById("result").innerHTML = result.value;
}
服务器端代码相似Anthem.NET版本的实现方式,一样须要在Page_Load中注册,且须要为方法应用一个属性——不过这里是[AjaxPro.AjaxMethod]:
[AjaxPro.AjaxMethod]
public string GetServerTime()
{
return DateTime.Now.ToString();
}
protected void Page_Load(object sender, EventArgs e)
{
AjaxPro.Utility.RegisterTypeForAjax(this.GetType());
}
出处:http://www.cnblogs.com/dflying/archive/2006/11/27/573860.html