客戶端回調(diào)的實現(xiàn)分析_第1頁
客戶端回調(diào)的實現(xiàn)分析_第2頁
客戶端回調(diào)的實現(xiàn)分析_第3頁
全文預(yù)覽已結(jié)束

下載本文檔

版權(quán)說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請進行舉報或認領(lǐng)

文檔簡介

客戶端回調(diào)的實現(xiàn)分析2007-07-2613:19:13|分類:|瀏覽:0ASP.NET初學者入門最佳實踐開發(fā)人員使用JavaScript的一個主要原因就是可以避免回發(fā)過程中帶來的頁面刷新。例如我們可以根據(jù)用戶的需要使用Treeview控件來展開和折疊相應(yīng)的數(shù)據(jù)節(jié)點。當你展開一個節(jié)點時,該Treeview控件將會利用JavaScript讀取服務(wù)器上的子節(jié)點信息,然后平滑無刷新地插入這些新節(jié)點。如果沒有使用JavaScript的話,Treeview控件將會因為頁面的回發(fā)而重新構(gòu)建。不但用戶會發(fā)現(xiàn)因頁面刷新而帶來的延遲,而且頁面極有可能回復到原來的狀態(tài),即丟失前面所展開的那些子節(jié)點信息。對于服務(wù)器端來說,因為每次回發(fā)的過程中都要處理大量的視圖狀態(tài)(ViewState)信息,這也會嚴重影響程序的整體執(zhí)行性能。以前我們使用的JavaScript示例幾乎都是自包含的,即它們通常是為了完成一些特殊的顯示效果(例如彈出一個新的頁面窗口),而沒有和服務(wù)器端代碼進行信息的交互。如果你也想構(gòu)建一個類似的無刷新頁面的話,你首先必須調(diào)用服務(wù)器端的一個特定的方法,等待服務(wù)器響應(yīng)后就會將請求的信息傳遞到客戶端,從而避免了回發(fā)這個過程。為了實現(xiàn)這個方案,你首先需要對如何將客戶端腳本和服務(wù)器端代碼進行通訊有個大致的了解。盡管有許多中方法可以實現(xiàn)這兩者間的交互(例如調(diào)用Web服務(wù)),但是由于受到特定的瀏覽器和平臺的限制,它們的實現(xiàn)是還是有一定的難度的。而在ASP.NET2.0中,引入了一個稱為喀戶端回調(diào)"的功能,利用這個內(nèi)建的解決方案我們可以輕松實現(xiàn)客戶端腳本和服務(wù)器端代碼間的交互,從而避免了頁面因回發(fā)帶來的頻繁刷新。客戶端回調(diào)本質(zhì)上就是指通過前端的客戶端腳本向服務(wù)器端傳遞相應(yīng)的數(shù)據(jù)參數(shù),服務(wù)器端再以接受到的參數(shù)進行查詢和處理,最后將結(jié)果回傳到客戶端進行顯示。雖然這樣的過程不是一種創(chuàng)舉,但是對于許多開發(fā)者來說這在某種思維上還是無法理解的,因為JavaScript的內(nèi)存管理和.NETCLR的內(nèi)存管理是不同的進程,而且管理的空間上也截然不同,所以彼此間無法直接參照也沒有直接進行交互的方式,而客戶端回調(diào)卻是實現(xiàn)客戶端和服務(wù)器端進行溝通的方法之一,又因為它是在客戶端觸發(fā)的,所以這就應(yīng)該是"客戶端回調(diào)"命名的由來吧!創(chuàng)建一個簡單的客戶端回調(diào)為了在ASP.NET中展示一個客戶端回調(diào)的實例,首先我們將概述客戶端回調(diào)間的交互過程是如何實現(xiàn)的。下面是基本的步驟:在某時刻激活一個JavaScript事件,從而觸發(fā)客戶端回調(diào)。觸發(fā)客戶端回調(diào)發(fā)生后,服務(wù)器端的一個方法將被執(zhí)行。該方法有一個固定的模式--它接受的是一個字符串參數(shù),并且返回的也是一個字符串參數(shù)。一旦頁面接受到來自服務(wù)器端方法的響應(yīng)結(jié)果后,它就可以利用JavaScript修改一些和用戶界面有關(guān)的信息(例如顯示在頁面上顯示返回的結(jié)果)對于開發(fā)人員來說,底層的交互過程是非常復雜的,ASP.NET則將交互的處理過程進行了抽象化,這樣使得開發(fā)人員可以直接建立表層的客戶端回調(diào),而無需考慮底層的操作是如何實現(xiàn)的。下面的實例中,頁面中放置了一個文本框,一個提交按鈕和一個標簽。文本框是用來接受用戶的輸入信息,在單擊提交按鈕后將把文本框中輸入的信息在標簽上進行實時的顯示。注意,在輸入信息后單擊提交按鈕時,并沒有像以前傳統(tǒng)的提交方式那樣重新對頁面進行構(gòu)建和刷新。圖1-1為該實例的效果圖。

朋備器鍛-—二EDdDDlg 朋備器鍛-—二EDdDDlgHf—pCClHorc-曲SEmniK-uurnni—il^aBESQI亂理閔覧證護運廳匡iffl方誘迫回轄嵐拘一個〒樸事 URLlffJft—暮剛■—二用尸草擊提盤按"'JavaScriptlU舊"#T1科■甚fet牛后£1:1姑象用HlML也|亍童創(chuàng)創(chuàng)建基本的頁面按照上圖的布局在工具欄的"標準"標簽中拖拽出一個TextBox控件,一個Label控件到主窗體上。然后在"HTML"標簽中拖拽出一個InputButton的HTML按鈕,注意,該按鈕不是我們經(jīng)常使用的服務(wù)器端控件,而是一個HTML元素。在按鈕中添加一個onclick事件,點擊該按鈕這將向服務(wù)器端發(fā)出回調(diào)請求,這個onclick事件的具體實現(xiàn)細節(jié)將在以后的過程中加以說明。得到的初始頁面代碼如下:<%@PageLanguage="C#"AutoEventWireup="true"CodeFile="CallBackExample.aspx.cs"Inherits="CallBackExample"%><htmlxmlns="/1999/xhtml"><headrunat="server">ctitle>客戶端回調(diào)</title></head><body><formid="forml"runat="server"><div>請輸入信息:<asp:TextBoxID="txtEnter"runat="server"x/asp:TextBox><inputid="bttnSubmit"type="button"value="提交"/><br/><asp:LabelID="lblShow"runat="server"></asp:Label></div></form></body></html>執(zhí)行回調(diào)為了實現(xiàn)客戶端回調(diào),你的頁面邏輯代碼中必須實現(xiàn)一個ICallbackEventHandler接口。代碼如下:publicpartialclassCallBackExample:System.Web.UI.Page,System.Web.UI.ICallbackEventHandlerICallbackEventHandler接口定義了兩個方法,RaiseCallbackEvent()從瀏覽器接受一個字符串作為事件參數(shù),即該方法接受客戶端JavaScript使傳遞的參數(shù),注意它是首先觸發(fā)的。接下來觸發(fā)的就是GetCallbackResult()方法,它將所得到的結(jié)果傳回給客戶端的JavaScript,JavaScript再將結(jié)果更新到頁面。本例中的RaiseCallbackEvent()中的參數(shù)為我們在文本框的輸入信息。為了表明它是從服務(wù)器返回的,我們加了一些說明性的文字。然后用GetCallbackResult()方法中將結(jié)果傳回到客戶端。完整的頁面邏輯代碼如下:usingSystem;usingSystem.Data;usingSystem.Configuration;usingSystem.Collections;usingSystem.Web;usingSystem.Web.Security;usingSystem.Web.UI;usingSystem.Web.UI.WebControls;usingSystem.Web.UI.WebControls.WebParts;usingSystem.Web.UI.HtmlControls;publicpartialclassCallBackExample:System.Web.UI.Page,System.Web.UI.ICallbackEventHandler{//定義一個字符串,回調(diào)的結(jié)果信息將保存在該字符串中privatestringresult;//引發(fā)回調(diào)事件處理publicvoidRaiseCallbackEven

溫馨提示

  • 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請下載最新的WinRAR軟件解壓。
  • 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶所有。
  • 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁內(nèi)容里面會有圖紙預(yù)覽,若沒有圖紙預(yù)覽就沒有圖紙。
  • 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
  • 5. 人人文庫網(wǎng)僅提供信息存儲空間,僅對用戶上傳內(nèi)容的表現(xiàn)方式做保護處理,對用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對任何下載內(nèi)容負責。
  • 6. 下載文件中如有侵權(quán)或不適當內(nèi)容,請與我們聯(lián)系,我們立即糾正。
  • 7. 本站不保證下載資源的準確性、安全性和完整性, 同時也不承擔用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。

評論

0/150

提交評論