您好,登錄后才能下訂單哦!
本篇文章給大家分享的是有關ASP.NET服務器控件開發中的實現事件淺析是怎樣的,小編覺得挺實用的,因此分享給大家學習,希望大家閱讀完這篇文章后可以有所收獲,話不多說,跟著小編一起來看看吧。
1. 事件基本概念
事件是當有動作發生或者狀態改變時,類發出的信息或者通知。通常情況下,狀態的發生或者改變由用戶界面動作初始化,例如,單擊按鈕,或者由于其他的程序邏輯引起。產生事件的類或者說發送通知的類叫做事件源sender,接收事件的類叫做事件接收者receiver。二者之間通過委托(delegate)實現關聯。下面列舉了一段常見的應用事件代碼。
// 聲明事件 ClickcustomControl.Click += new EventHandler(this.customControl1_Clicked); // 實現事件處理程序 customControl1_Clicked(object sender,EventArgs e){......}
如上代碼列舉了ASP.NET服務器控件聲明事件和實現事件處理程序的過程。由于這個過程非常簡單,在此將不多做解釋。另外,在實際應用中,開發人員通過為服務器控件實現事件機制,可以不采用以上的聲明事件方式,而是在控件聲明標記中僅僅列出"OnClick = customControl1_Clicked"即可。實際上,事件的聲明和具體事件處理程序的實現都是比較簡單易用的。然而,為控件實現事件機制卻不是一件容易的事情。
從ASP.NET服務器控件開發的角度而言,控件事件(僅指服務器端事件,而不包括客戶端事件)可能來自兩個方面:一是從基類繼承的事件。例如,假設自定義控件從Button類繼承,那么該控件將繼承基類的Click事件。二是根據開發需求而創建的自定義事件。下面分別對這兩種事件進行介紹。
2. 實現從基類繼承的事件
眾所周知,自定義ASP.NET服務器控件歸根結底是從System.Web.UI.Control派生而來。該基類中已經定義了一些事件。因此,在創建ASP.NET服務器控件過程中,很可能需要重寫以下繼承的多個事件。
·DataBinding事件:該事件當ASP.NET服務器控件綁定到數據源時發生,其對應事件處理程序為OnDataBinding。
·Disposed事件:該事件當從內存釋放服務器控件資源時發生,其對應的事件處理程序為OnDisposed。這是服務器控件生命周期的的***階段。
·Init事件:該事件當ASP.NET服務器控件初始化時發生,其對應的事件處理程序為OnInit。Init事件是控件生命周期的***步。
·Load事件:該事件當ASP.NET服務器控件加載到Page對象中時發生,其對應的事件處理程序為OnLoad。
·PreRender事件:該事件在加載Control對象之后、呈現之前發生,其對應的事件處理程序為OnPreRender。
·Unload事件:該事件當ASP.NET服務器控件從內存中卸載時發生,其對應的事件處理程序為OnUnload。
以上內容針對Control基類的幾個事件進行了簡要說明。由于服務器控件均繼承自Control基類(WebControl也是繼承自Control類),因此,開發人員完全可以重寫事件所對應的事件處理程序,這樣便可以實現一些自定義內容。
若要實現自定義繼承的事件,需要重寫從基類繼承的受保護的OnEventName方法,而不必附加委托(EventHandler)。通常情況下,重寫的事件處理程序應該調用基類的OnEventName方法,以確保調用附加到事件的委托(除非不想調用這些委托)。以下代碼片段說明自定義控件重寫繼承的DataBinding事件的處理過程。
protected override void OnDataBinding(EventArgs e) { //添加一些自定義邏輯代碼 //調用基類方法 base.OnDataBinding(e); }
如上代碼所示,在重寫事件處理程序OnDataBinding過程中,首先需要添加一些根據應用需求而實現的自定義邏輯代碼,然后,一定要牢記需調用基類方法。
以上內容對Control基類的事件和派生類重寫對應事件處理程序的過程進行了介紹。需要讀者注意的是,上文并非說明自定義服務器控件僅能夠重寫以上幾個來自Control基類事件的事件處理程序。如果自定義控件繼承自其他原本帶有事件的基類,例如,Button、DataList等(歸根到底,它們也是從Control基類繼承),那么繼承的事件處理程序仍然可以被重寫,例如,繼承自Button類的控件自然獲得Click事件,并且可以重寫OnClick事件處理程序。
3. 創建自定義ASP.NET服務器控件事件
在介紹創建自定義服務器控件事件的方法之前,我們首先來簡單回顧一下相關的事件模型。
在Web窗體頁面中,與ASP.NET服務器控件關聯的事件由客戶端引發并由Web服務器處理(注意:事件必須稱為"引發",而不要使用"觸發"和"激發"等詞,它們都是不準確,不規范的)。對于在客戶機上由ASP.NET服務器控件引發的事件,ASP.NET事件模型收集有關請求的信息,并使用HTTP Post將詳細信息傳遞到服務器。服務器上的Page Framework對該公告作出解釋以確定發生的事件,然后,調用適當的處理程序方法。下圖1簡單說明了這一過程。
如圖1所示,在客戶端計算機中,用戶單擊購物車的Add(添加)按鈕,試圖將所選商品放入購物車中。在單擊之后,事件模型收集了相關信息,例如,Submit = btnAddToCart,Prod3 = Gizmo等等,將這些信息通過Post方式傳遞到服務器。服務器在接收這些信息后,首先對其進行分析,然后,調用事件處理程序btnAddToCart(obj,event)進行處理。以上就是基本的事件處理模型。
對于普通應用程序開發人員而言,只需要實現控件的事件處理程序即可,更進一步的信息對于他們而言是隱藏的,而且也是沒有必要作更多關心的。然而,作為ASP.NET服務器控件開發人員,則必須仔細考慮這一事件處理模型。
如果讀者仔細思考以上過程,則會發現兩個在事件處理模型中需要解決的重要問題。***,服務器端如何捕獲回傳的單擊事件,第二,通過Post方式回傳到服務器端的數據,具體是如何處理的。以上兩個問題至關重要。如果能夠解決好這兩個問題,那么創建自定義ASP.NET服務器控件事件則變得非常容易。
為了解決以上問題,ASP.NET提供了兩個重要接口:IPostBackEventHandler和IPostBackDataHandler。IPostBackEventHandler接口用于處理由客戶端引發的頁面回傳的事件。實現此接口,ASP.NET服務器控件可將客戶端的提交表單事件對應到服務器端的事件上,并且通過事件處理程序完成對該客戶端事件的處理。IPostBackDataHandler接口用于檢查提交給頁面的數據,并確定是否在客戶端修改過。當控件實現該接口,控件則自動具有了參與回傳數據的處理能力。開發人員可以通過實現接口相關成員,完成針對回傳數據的處理邏輯。
實際上,ASP.NET中絕大多數服務器控件都引發從客戶端到服務器的回傳,并且讀者實現的很多服務器控件也必須引發回傳。因此,以上兩個接口對于實現控件事件非常重要。對于它們,本節僅簡單介紹一下。在隨后的文章中,讀者將通過典型示例,詳細了解實現接口成員,捕獲回傳事件,處理回傳數據的具體方法。
另外,ASP.NET增強了有關回調處理方面的功能。例如,使用System.Web.UI.ICallbackEventHandler接口和Page.GetCallbackEventReference方法等。通過這些對象的應用可實現在客戶端運行服務器端代碼,從而避免丟失客戶端狀態并且不導致服務器往返的處理開銷。這些內容與服務器控件事件之間有著一些聯系。然而,由于回調應用在ASP.NET服務器控件中應用較少。因此,將不作過多說明。
從技術發展的角度來講,ASP.NET技術從1.x升級到2.0版本,在ASP.NET服務器控件事件開發方面沒有任何明顯的修改。如果讀者已經了解了ASP.NET 1.x下創建服務器控件事件的內容,那么可以按照過去1.x的方法和思路進行開發。
以上就是ASP.NET服務器控件開發中的實現事件淺析是怎樣的,小編相信有部分知識點可能是我們日常工作會見到或用到的。希望你能通過這篇文章學到更多知識。更多詳情敬請關注億速云行業資訊頻道。
免責聲明:本站發布的內容(圖片、視頻和文字)以原創、轉載和分享為主,文章觀點不代表本網站立場,如果涉及侵權請聯系站長郵箱:is@yisu.com進行舉報,并提供相關證據,一經查實,將立刻刪除涉嫌侵權內容。