asp.net|用戶端
從一開始,開發人員便受制於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函數提供支援。這些技術的應用是多方面的,總之,任何提高使用者體驗的改進都是對業務有益的。