ASP.NET中被忽略的角落1 – ASP.NET2.0的回調機制

來源:互聯網
上載者:User

本文參考《ASP.NET2.0經典案例教程》的部分內容。

雖然現在各種各樣的Ajax已近流行很久,但本文還是回顧一下ASP.NET2.0的Ajax技術 - 回調,就當是個懷舊。回調的作用類似於ASP.NET Ajax,其使瀏覽器能夠非同步呼叫遠程伺服器,而無需重新整理頁面。

    回調實現的方法及執行的過程如下:

1. 讓頁面實現ICallbackEventHandler介面,實現該介面的WebForm將自動添加用戶端JavaScript函數。GetCallbackEventReference方法擷取上文提到的用戶端JavaScript函數的名稱。該函數即是回調的發起者。

2. 在用戶端註冊的JavaScript中包含了一個回調管理器。其負責在瀏覽器與伺服器之間發起或響應XmlHttp通訊。頁面中以回調方式發送給伺服器的請求將被回調管理器攔截,並以符合Xml Http的方式將這個請求發送到伺服器。

3. 回調管理器將請求發送到伺服器後,伺服器調用ICallbackEventHandler.RaiseCallbackEvent()來處理。開發人員將處理請求的邏輯放置在這個函數中,處理調用並返迴響應,響應的傳回值可以為字串。

4. 響應被返回給回調管理器,回調管理器通知調用者回調已完成,並將響應字串交給最初的調用者。

 

下面將給出一段樣本性代碼來展示這個過程。

1. 首先建立一個WebForm名為CallBack.aspx,並讓這個CallBack類實現ICallbackEventHandler介面。

public partial class Callback : System.Web.UI.Page,ICallbackEventHandler

 

2. 在VS中使用重構工具顯示實現這個介面,會產生如下兩個方法。

#region ICallbackEventHandler 成員

 

string ICallbackEventHandler.GetCallbackResult()

{

throw new NotImplementedException();

}

 

void ICallbackEventHandler.RaiseCallbackEvent(string eventArgument)

{

throw new NotImplementedException();

}

 

#endregion

其中RaiseCallbackEvent()接受來自用戶端的調用,讓伺服器能夠處理所需的商務邏輯,GetCallbackResult()函數將響應返回給用戶端,讓用戶端能夠通過JavaScript在瀏覽器中顯示更新。

 

3. 這一步提供用戶端指令碼,函數名分別為CallServer和ReceiveServerData的函數提供了回調管理器指令碼的入口和出口。

protected void Page_Load(object sender, EventArgs e)

{

ClientScriptManager cm = Page.ClientScript;

string cbReference;

cbReference = cm.GetCallbackEventReference(this, "arg", "ReceiveServerData", "");

string callbackScript = "";

callbackScript += "function CallServer(arg, context){" + cbReference + ";}";

cm.RegisterClientScriptBlock(this.GetType(), "CallServer", callbackScript, true);

}

 

4. 在Form中添加一個文字框的表單元素,將其命名為txtMessage。其用來取得使用者要提交給伺服器的資料。

<input id="txtMessage" type="text" style="width: 218px; height: 55px" />

 

5. 接下來添加一個按鈕,按鈕的onclick事件處理中調用回調管理器的入口(即第3步中的CallServer函數)。

<input id="Button1" type="button" value="Send"

onclick="CallServer(document.getElementById('textMessage').value,null)"

style="width:57px;height:60px" />

onclick接受txtMessage控制項的text值作為參數。

 

6. 在表單中添加名為ReceiveServerData()的JavaScript函數。該函數接受參數arg和context。Arg提供伺服器處理完調用後返回的響應。在這其中可以編寫任意的Js代碼來更新html。

<script type="text/javascript">

function ReceiveServerData(arg, context) {

var obj = document.getElementById("result");

obj.innerHTML += arg;

}

</script>

 

最後附上這個分頁檔供參考。

相關文章

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.