亚洲香蕉成人av网站在线观看_欧美精品成人91久久久久久久_久久久久久久久久久亚洲_热久久视久久精品18亚洲精品_国产精自产拍久久久久久_亚洲色图国产精品_91精品国产网站_中文字幕欧美日韩精品_国产精品久久久久久亚洲调教_国产精品久久一区_性夜试看影院91社区_97在线观看视频国产_68精品久久久久久欧美_欧美精品在线观看_国产精品一区二区久久精品_欧美老女人bb

首頁 > 編程 > .NET > 正文

ASP.NET AJAX客戶端生命周期分析(理論篇)

2024-07-10 13:12:56
字體:
來源:轉載
供稿:網友

  一、引言

  微軟的asp.net ajax框架,作為一個相對比較完善的ajax框架,有許多方面值得我們作深入研究。本文中,我們將結合一個具體的例子試圖探究asp.net ajax框架的客戶端生命周期過程。

  【注】閱讀本文最好要結合“asp.net應用程序生命周期概述”和“asp.net頁面生命周期概述”兩篇文章共同學習。

  二、asp.net ajax客戶端生命周期原理

  因為asp.net ajax框架在開發思路上極大地借鑒了asp.net 2.0的開發技術,而且將會被逐步“收錄”到asp.net 2.0中;所以,一個asp.net ajax頁面也存在自己的生命周期,而且與一個asp.net 2.0 web頁面生命周期之間存在很大的可比之處。

  asp.net ajax頁面中的客戶端事件能夠支持我們無論是針對傳統回送還是對于異步回送(即“局部頁面刷新”)都能定制自己的用戶界面。而且,這些事件在其整個瀏覽器端頁面生命周期中還可以幫助我們管理和使用自定義的腳本。

  這些客戶端事件均集中在asp.net ajax框架客戶端類庫中。當加載一個帶有asp.net ajax服務器控件的頁面時,這些類都會由框架自動地實例化。借助于這些類客戶端提供的一些api,我們能夠輕松地實現頁面中客戶端事件的綁定功能。因為這部分asp.net ajax客戶端庫完全獨立于瀏覽器,所以我們編寫出的代碼當然可以工作在當前所有流行的瀏覽器環境中。

  在眾多的客戶端事件中,最關鍵的一個事件當屬初始化請求(‘get’方式)和異步回送期間application實例的load事件。

  【注意】當load事件處理器程序中的腳本開始運行時,所有其它的腳本和組件都應該已經被加載并且完全可用了。

  當使用服務器控件updatepanel進行局部頁面刷新時,所有相關客戶端事件中最重要的就是sys.webforms.pagerequestmanager類中相關的幾個事件。這幾個重要客戶端事件幫助你完全一些常規任務,例如撤銷回送,為某個回送設置更高的優先級,還可以使updatepanel控件在刷新期間產生一定的動畫效果,等等。深入理解所有這些客戶端事件對于我們創建頁面或開發基于asp.net ajax框架的組件都將有很大的幫助。例如,如果你是一位網頁開發人員,你可以為頁面在加載和卸載期間使用自己的定制腳本。

  三、客戶端類解析

  前面我們簡單提到過,sys.application類和sys.webforms.pagerequestmanager類是在整個asp.net ajax web頁面客戶端生命周期期間兩個最主要的類。下面,我們將進行逐一分析。

  當瀏覽器請求一個包含有scriptmanager控件的頁面時,application類就被實例化。application類與服務器端的page控件極其類似(page控件繼承自服務器端的control類),不過針對引發服務端事件還提供了額外的功能。類似地,application類派生自客戶端的sys.component類;但是它引發的是一系列的客戶端生命周期事件。

  如果一個頁面中包含一個scriptmanager控件及數個updatepanel控件,那么這個頁面就可以實現部分更新效果(當然,如果瀏覽器支持并啟動局部更新功能的話)。在這種情況下,一個pagerequestmanager類的實例將在瀏覽器端創建并起作用。事實上,這個pagerequestmanager實例引發的客戶端事件都是關于異步回送方面的。

  四、為客戶端事件添加事件處理器

  要針對application類和pagerequestmanager類的實例所引發的事件添加或移除相應的事件處理器,我們可以使用add_eventname和reomve_eventname方法來完全這些任務。下面這個例子展示了如何為application對象的init事件添加一個名為myload的事件處理器函數:

sys.application.add_init(myinit);// 添加事件處理器
function myinit(sender) {…………}
//…………
sys.appplication.remove_init(myinit);//移除相應的事件處理器

  這段代碼僅說明了操作的基本語法形式,后面我們將進行具體的舉例說明。

  五、處理application的load和unload事件

  注意,要處理application對象的load和unload事件,不需要我們顯式地綁定到把一個事件處理器函數綁定到這些事件上,而是直接使用保留關鍵字pageload和pageunload創建相應的函數即可。下面這個例子展示了如何為application的load事件添加一個事件處理器函數。

function pageload(sender, args) {…………}

  【作者注】在線參考資料上也這樣說—“只須使用保留關鍵字pageload和pageunload創建相應的函數即可”,但要刨根問底起來:這一細節到底是在什么地方實現?有興趣的讀者可以進一步鉆研隨同框架下載的一組“api”;這其實是一些看上去竟然有些“混亂”(估計是經過簡單的“混淆”處理)的函數。

  六、其它客戶端有關的事件

  在本文中,我們僅專注于探討由application和pagerequestmanager類提供的事件(因為與這兩個類相關聯的事件在兩個客戶端頁面生命周期中起著至關重要的作用)。其實,微軟的ajax類庫還包括了一個針對dom元素事件操作的專用類—sys.ui.domevent。而以下是一些典型的用于添加、清除和移除相應事件處理器函數的全局方法。這些方法包括:

  —sys.ui.domevent.addhandler,簡寫為$addhandler;

  —sys.ui.domevent.clearhandlers,簡寫為$clearhandlers;

  —sys.ui.domevent.removehandler,簡寫為$removehandler。

  但是,有關dom元素提供的事件不是本文討論之列(而且也比較簡單)。

  七、application和pagerequestmanager相關事件深度解析

  為了方便起見,我們以表格形式舉例出了application和pagerequestmanager類相關的客戶端事件(所有這些事件都是我們可以在支持ajax asp.net技術的頁面中加以操縱的)。至于事件引發的先后順序將在后面的示例中分析。

  事件

解釋
init(初始化事件)在加載完所有腳本但創建任何一個對象之前引發該事件。如果你在開發一個客戶端組件,那么,這個init事件為你提供了一個在頁面生命周期內把該組件添加到頁面的時機。此后,該組件即可被在頁面生命周期內的其它組件及腳本所調用。如果你是網頁開發人員,那么在大多數的情況之下,建議你使用load事件來替代init事件進行有關處理?!咀ⅰ縤nit事件只在頁面開始生成時創建一次。后來的部分頁面刷新將不會再引發此事件。
load(加載事件)該事件在加載完所有腳本并且在該程序中的對象(使用$create創建)全部初始化結束后引發。該事件針對所有到服務器的回送(也包括異步的回送)都將被引發。如果你是網頁開發人員,你可以創建一個名為pageload的函數,該函數會自動為load事件提供一個處理器函數。注意,這個pageload處理器是在所有load事件中的事件處理器(通過add_load方法添加)調用之后被調用的。此外,load事件僅需要一個sys.applicationloadeventargs對象作為參數。你可以通過該參數來決定頁面經局部更新后是否正是被刷新,還可以確定在上一個load事件引發后創建了哪些組件。
unload(卸載事件)在釋放所有對象和瀏覽器中的window.unload事件發生之前引發此事件。如果你是網頁開發人員,你可以創建個名為pageunload的函數;之后,系統會自動為unload事件提供一個事件處理器函數。這個事件恰好是在瀏覽器卸載頁面之前被調用。因為是最后一次機會,所以在該事件發生期間,我們應當釋放由代碼占用的全部資源。
propertychanged(屬性改變事件)當某組件的屬性發生改變時引發該事件。application對象是從component類中繼承這個事件的。典型情況下,該事件僅由組件開發人員使用;他在設置某個屬性相應的set訪問器的過程中時調用sys.component.raisepropertychange方法時才引發。此事件需要一個使用sys.applicationloadeventargs對象作為參數。
disposing(釋放事件)在釋放application實例時引發該事件。該事件是由application對象從component類中繼承來的。
initializerequest(初始化請求事件)該事件發生在一個異步請求開始之前。你可以通過使用該事件來取消一個傳統的回送而讓一個異步回送獲得優先執行權。該事件僅使用一個sys.webforms.initializerequesteventargs對象作參數。通過這個對象我們可以操作引發回送的元素甚至是request對象。該事件還暴露了一個cancel屬性。如果你設置cancel的值為true,那么,一個新的回送將被撤銷。
beginrequest(開始請求事件)該事件發生在一個異步請求開始但向服務器實現回送之前。該事件是在一個回送到服務器的異步回送開始前引發。如果當前已經存在了一個回送進程,則會被強硬地停止(通過abortpostback方法)。你可以使用該事件來設置請求的頭部信息或在頁面中顯示一個動畫以提示該請求正在進行中。該事件需要一個sys.webforms.beginrequesteventargs對象作為參數。我們也可以通過這個對象來操作引發回送的元素甚至是request對象。
pageloading(頁面正在加載事件)在接收一個來自服務器端的異步回送響應之后,且在頁面中任何內容被更新之前引發此事件。在實際開發中,我們可以使用該事件來為需要更新的內容提供某種定制的過渡效果。該事件需要一個sys.webforms.pageloadingeventargs對象作為參數。通過該對象,我們可以從最近的異步回送返回的結果中了解到頁面中的哪些面板元素(例如div,span等)將被刪除和更新。
pageloaded(頁面加載完成事件)在所有頁面內容刷新之后(無論是經同步回送還是異步回送的結果)引發此事件。在同步回送時,只能創建面板元素;但在異步回送時,可以創建和更新面板元素。我們可以使用該事件來管理針對需要更新的內容的某種定制過渡效果。該事件需要一個sys.webforms.pageloadedeventargs對象作為參數。該對象提供了關于最近回送時哪些面板元素被更新和創建的有用信息。
endrequest(結束請求事件)在響應完一次異步回送并且頁面得到更新后,或在請求過程中發生了錯誤時引發此事件。如果發生了某個錯誤,頁面將不會被更新。因此,我們可以通過這個事件來提供某種定制的錯誤提示信息給訪問者或把此信息記錄到錯誤日志中。該事件需要一個sys.webforms.endrequesteventargs對象作為eventargs參數。該對象提供了有關被引發的錯誤和錯誤是否被處理的一些有用的信息;而且我們可以通過此對象操作response對象。

  八、小結

  在本篇中,我們將對asp.net ajax客戶端生命周期中的重要事件作詳盡列舉,并給出典型的適用場合。在接下來的下篇中,我們分析一個實際的簡單案例,并試圖對asp.net ajax客戶端生命周期中主要關聯事件的發生順序作深度解析。

發表評論 共有條評論
用戶名: 密碼:
驗證碼: 匿名發表
亚洲香蕉成人av网站在线观看_欧美精品成人91久久久久久久_久久久久久久久久久亚洲_热久久视久久精品18亚洲精品_国产精自产拍久久久久久_亚洲色图国产精品_91精品国产网站_中文字幕欧美日韩精品_国产精品久久久久久亚洲调教_国产精品久久一区_性夜试看影院91社区_97在线观看视频国产_68精品久久久久久欧美_欧美精品在线观看_国产精品一区二区久久精品_欧美老女人bb
欧美日韩免费区域视频在线观看| 国产精品女视频| 欧洲s码亚洲m码精品一区| 久久激情视频免费观看| 日韩福利在线播放| 国产精品69久久| 国产成人免费91av在线| 亚洲japanese制服美女| 亚洲最大成人免费视频| 97在线精品视频| 欧美日韩亚洲一区二区三区| 久久久日本电影| 国产精品伦子伦免费视频| 国产精品久久久av久久久| 欧美wwwxxxx| 精品久久久久久中文字幕大豆网| 国精产品一区一区三区有限在线| 色综合久久天天综线观看| 精品久久久精品| 91九色国产视频| 国产在线视频欧美| 欧美成人一区二区三区电影| 欧美一级视频一区二区| 国产成人精彩在线视频九色| 国产视频999| 成人日韩av在线| 自拍偷拍免费精品| 欧美裸体xxxxx| 亚洲欧美激情精品一区二区| 久久久中文字幕| 精品久久久久久久久久久久| 亚洲天堂日韩电影| 欧美日韩国产在线看| 午夜精品久久久久久久白皮肤| 九九久久综合网站| 深夜福利91大全| 日产日韩在线亚洲欧美| 亚洲精品999| 久久69精品久久久久久国产越南| 欧美特级www| 国产噜噜噜噜噜久久久久久久久| 亚洲国产欧美精品| 综合网中文字幕| 一区二区三区视频在线| 91国产视频在线播放| 中文字幕在线观看日韩| 尤物yw午夜国产精品视频明星| 久久久伊人日本| 亚洲最大成人网色| 中文国产成人精品久久一| 在线观看亚洲视频| 国产丝袜高跟一区| 亚洲福利视频网站| 亚洲人成绝费网站色www| 久久亚洲春色中文字幕| 欧美激情视频一区二区| 成人黄色大片在线免费观看| 中文字幕日韩欧美精品在线观看| 国产精品最新在线观看| 日韩中文字幕精品视频| 国产69精品久久久| 成人激情视频在线观看| 国产精品电影网| 欧美精品成人91久久久久久久| 欧美韩国理论所午夜片917电影| 亚洲精品一区二区在线| 国产成人一区二区三区小说| 91欧美精品成人综合在线观看| 日韩av一区在线观看| 精品国产老师黑色丝袜高跟鞋| 91国偷自产一区二区三区的观看方式| 亚洲国产三级网| 日韩在线观看免费| 欧美精品成人91久久久久久久| 日韩一区视频在线| 欧美激情在线视频二区| 色综合伊人色综合网| 日韩hd视频在线观看| 国产精品99导航| 久久久久一本一区二区青青蜜月| 亚洲免费小视频| 欧美性少妇18aaaa视频| 欧美日韩国产在线| 疯狂欧美牲乱大交777| 国产亚洲一区二区精品| 这里精品视频免费| 91精品视频在线看| 国产裸体写真av一区二区| 国产精品久久久久久久久久久久久久| 2019国产精品自在线拍国产不卡| 在线免费看av不卡| 色悠久久久久综合先锋影音下载| 欧美性猛交xxxx乱大交蜜桃| 在线播放精品一区二区三区| 国产免费一区二区三区在线观看| 国产又爽又黄的激情精品视频| 久久久久久中文字幕| 国产精自产拍久久久久久| 不卡伊人av在线播放| 国产精品视频999| 国产精品99久久久久久久久| 国产成人高清激情视频在线观看| 亚洲成人黄色网址| 欧美整片在线观看| 欧美综合国产精品久久丁香| 亚洲欧美日韩精品久久亚洲区| 中文字幕精品—区二区| 欧美激情按摩在线| 亚洲人成伊人成综合网久久久| 亚洲xxxxx性| 久久免费精品视频| 黄色成人在线免费| 一区二区三区高清国产| 欧美孕妇孕交黑巨大网站| 亚洲精品国产综合区久久久久久久| 欧美第一黄网免费网站| 亚洲精品美女久久久| 亚洲人线精品午夜| 欧美在线一区二区三区四| 亚洲成人av片在线观看| 视频在线观看99| 国内精品久久影院| 日韩极品精品视频免费观看| 国产+成+人+亚洲欧洲| 2019最新中文字幕| 96精品视频在线| 亚洲综合在线播放| 国产精品日日摸夜夜添夜夜av| www日韩欧美| 亚洲午夜精品视频| 精品女厕一区二区三区| 日韩a**站在线观看| 欧美片一区二区三区| 久久视频免费在线播放| 国内外成人免费激情在线视频网站| 国产精品观看在线亚洲人成网| 26uuu国产精品视频| 成人国产精品久久久| 国产69精品久久久久9999| 亚洲欧美中文字幕| 7777免费精品视频| 自拍偷拍免费精品| 亚洲桃花岛网站| 欧美精品做受xxx性少妇| 欧美日韩在线看| 欧美日本亚洲视频| 欧美亚洲另类视频| 成人激情视频在线播放| 国产精品久久久久久久久久99| 亚洲天堂av在线免费| 亚洲永久免费观看| 国产精品入口免费视| 神马国产精品影院av| 日本精品一区二区三区在线| 国产一区二区三区毛片| 色偷偷av一区二区三区| 欧美午夜美女看片| 97视频在线观看亚洲| 日韩一区二区精品视频| 久久伊人色综合| 国产精品久久久久久久久男| 日韩经典中文字幕| 中文字幕亚洲天堂| 久久久久免费精品国产|