前幾天曾經發過一篇《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