自拍偷在线精品自拍偷,亚洲欧美中文日韩v在线观看不卡

ASP.NET服務(wù)器控件開發(fā)之實(shí)現(xiàn)事件淺析

開發(fā) 后端
ASP.NET服務(wù)器控件開發(fā)之實(shí)現(xiàn)事件想大家講述了事件的基本概念,幫助開發(fā)人員在實(shí)際的開發(fā)ASP.NET服務(wù)器控件創(chuàng)建事件。

本文將探討創(chuàng)建自定義ASP.NET服務(wù)器控件事件的方法。本文重點(diǎn)對實(shí)現(xiàn)控件事件的基本概念進(jìn)行介紹,這些概念對于幫助開發(fā)人員為ASP.NET服務(wù)器控件創(chuàng)建事件有著重要意義。

1. 事件基本概念

事件是當(dāng)有動(dòng)作發(fā)生或者狀態(tài)改變時(shí),類發(fā)出的信息或者通知。通常情況下,狀態(tài)的發(fā)生或者改變由用戶界面動(dòng)作初始化,例如,單擊按鈕,或者由于其他的程序邏輯引起。產(chǎn)生事件的類或者說發(fā)送通知的類叫做事件源sender,接收事件的類叫做事件接收者receiver。二者之間通過委托(delegate)實(shí)現(xiàn)關(guān)聯(lián)。下面列舉了一段常見的應(yīng)用事件代碼。

  1. // 聲明事件  
  2. ClickcustomControl.Click += new EventHandler(this.customControl1_Clicked);  
  3. // 實(shí)現(xiàn)事件處理程序  
  4. customControl1_Clicked(object sender,EventArgs e){......}  

如上代碼列舉了ASP.NET服務(wù)器控件聲明事件和實(shí)現(xiàn)事件處理程序的過程。由于這個(gè)過程非常簡單,在此將不多做解釋。另外,在實(shí)際應(yīng)用中,開發(fā)人員通過為服務(wù)器控件實(shí)現(xiàn)事件機(jī)制,可以不采用以上的聲明事件方式,而是在控件聲明標(biāo)記中僅僅列出"OnClick = customControl1_Clicked"即可。實(shí)際上,事件的聲明和具體事件處理程序的實(shí)現(xiàn)都是比較簡單易用的。然而,為控件實(shí)現(xiàn)事件機(jī)制卻不是一件容易的事情。

從ASP.NET服務(wù)器控件開發(fā)的角度而言,控件事件(僅指服務(wù)器端事件,而不包括客戶端事件)可能來自兩個(gè)方面:一是從基類繼承的事件。例如,假設(shè)自定義控件從Button類繼承,那么該控件將繼承基類的Click事件。二是根據(jù)開發(fā)需求而創(chuàng)建的自定義事件。下面分別對這兩種事件進(jìn)行介紹。

2. 實(shí)現(xiàn)從基類繼承的事件

眾所周知,自定義ASP.NET服務(wù)器控件歸根結(jié)底是從System.Web.UI.Control派生而來。該基類中已經(jīng)定義了一些事件。因此,在創(chuàng)建ASP.NET服務(wù)器控件過程中,很可能需要重寫以下繼承的多個(gè)事件。

·DataBinding事件:該事件當(dāng)ASP.NET服務(wù)器控件綁定到數(shù)據(jù)源時(shí)發(fā)生,其對應(yīng)事件處理程序?yàn)镺nDataBinding。

·Disposed事件:該事件當(dāng)從內(nèi)存釋放服務(wù)器控件資源時(shí)發(fā)生,其對應(yīng)的事件處理程序?yàn)镺nDisposed。這是服務(wù)器控件生命周期的的***階段。

·Init事件:該事件當(dāng)ASP.NET服務(wù)器控件初始化時(shí)發(fā)生,其對應(yīng)的事件處理程序?yàn)镺nInit。Init事件是控件生命周期的***步。

·Load事件:該事件當(dāng)ASP.NET服務(wù)器控件加載到Page對象中時(shí)發(fā)生,其對應(yīng)的事件處理程序?yàn)镺nLoad。

·PreRender事件:該事件在加載Control對象之后、呈現(xiàn)之前發(fā)生,其對應(yīng)的事件處理程序?yàn)镺nPreRender。

·Unload事件:該事件當(dāng)ASP.NET服務(wù)器控件從內(nèi)存中卸載時(shí)發(fā)生,其對應(yīng)的事件處理程序?yàn)镺nUnload。

以上內(nèi)容針對Control基類的幾個(gè)事件進(jìn)行了簡要說明。由于服務(wù)器控件均繼承自Control基類(WebControl也是繼承自Control類),因此,開發(fā)人員完全可以重寫事件所對應(yīng)的事件處理程序,這樣便可以實(shí)現(xiàn)一些自定義內(nèi)容。

若要實(shí)現(xiàn)自定義繼承的事件,需要重寫從基類繼承的受保護(hù)的OnEventName方法,而不必附加委托(EventHandler)。通常情況下,重寫的事件處理程序應(yīng)該調(diào)用基類的OnEventName方法,以確保調(diào)用附加到事件的委托(除非不想調(diào)用這些委托)。以下代碼片段說明自定義控件重寫繼承的DataBinding事件的處理過程。

  1. protected override void OnDataBinding(EventArgs e)   
  2. {  
  3.  //添加一些自定義邏輯代碼   
  4.  //調(diào)用基類方法  
  5.  base.OnDataBinding(e);  
  6. }  

如上代碼所示,在重寫事件處理程序OnDataBinding過程中,首先需要添加一些根據(jù)應(yīng)用需求而實(shí)現(xiàn)的自定義邏輯代碼,然后,一定要牢記需調(diào)用基類方法。

以上內(nèi)容對Control基類的事件和派生類重寫對應(yīng)事件處理程序的過程進(jìn)行了介紹。需要讀者注意的是,上文并非說明自定義服務(wù)器控件僅能夠重寫以上幾個(gè)來自Control基類事件的事件處理程序。如果自定義控件繼承自其他原本帶有事件的基類,例如,Button、DataList等(歸根到底,它們也是從Control基類繼承),那么繼承的事件處理程序仍然可以被重寫,例如,繼承自Button類的控件自然獲得Click事件,并且可以重寫OnClick事件處理程序。

3. 創(chuàng)建自定義ASP.NET服務(wù)器控件事件

在介紹創(chuàng)建自定義服務(wù)器控件事件的方法之前,我們首先來簡單回顧一下相關(guān)的事件模型。

在Web窗體頁面中,與ASP.NET服務(wù)器控件關(guān)聯(lián)的事件由客戶端引發(fā)并由Web服務(wù)器處理(注意:事件必須稱為"引發(fā)",而不要使用"觸發(fā)"和"激發(fā)"等詞,它們都是不準(zhǔn)確,不規(guī)范的)。對于在客戶機(jī)上由ASP.NET服務(wù)器控件引發(fā)的事件,ASP.NET事件模型收集有關(guān)請求的信息,并使用HTTP Post將詳細(xì)信息傳遞到服務(wù)器。服務(wù)器上的Page Framework對該公告作出解釋以確定發(fā)生的事件,然后,調(diào)用適當(dāng)?shù)奶幚沓绦蚍椒?。下圖1簡單說明了這一過程。

ASP.NET事件模型 

如圖1所示,在客戶端計(jì)算機(jī)中,用戶單擊購物車的Add(添加)按鈕,試圖將所選商品放入購物車中。在單擊之后,事件模型收集了相關(guān)信息,例如,Submit = btnAddToCart,Prod3 = Gizmo等等,將這些信息通過Post方式傳遞到服務(wù)器。服務(wù)器在接收這些信息后,首先對其進(jìn)行分析,然后,調(diào)用事件處理程序btnAddToCart(obj,event)進(jìn)行處理。以上就是基本的事件處理模型。

對于普通應(yīng)用程序開發(fā)人員而言,只需要實(shí)現(xiàn)控件的事件處理程序即可,更進(jìn)一步的信息對于他們而言是隱藏的,而且也是沒有必要作更多關(guān)心的。然而,作為ASP.NET服務(wù)器控件開發(fā)人員,則必須仔細(xì)考慮這一事件處理模型。

如果讀者仔細(xì)思考以上過程,則會發(fā)現(xiàn)兩個(gè)在事件處理模型中需要解決的重要問題。***,服務(wù)器端如何捕獲回傳的單擊事件,第二,通過Post方式回傳到服務(wù)器端的數(shù)據(jù),具體是如何處理的。以上兩個(gè)問題至關(guān)重要。如果能夠解決好這兩個(gè)問題,那么創(chuàng)建自定義ASP.NET服務(wù)器控件事件則變得非常容易。

為了解決以上問題,ASP.NET提供了兩個(gè)重要接口:IPostBackEventHandler和IPostBackDataHandler。IPostBackEventHandler接口用于處理由客戶端引發(fā)的頁面回傳的事件。實(shí)現(xiàn)此接口,ASP.NET服務(wù)器控件可將客戶端的提交表單事件對應(yīng)到服務(wù)器端的事件上,并且通過事件處理程序完成對該客戶端事件的處理。IPostBackDataHandler接口用于檢查提交給頁面的數(shù)據(jù),并確定是否在客戶端修改過。當(dāng)控件實(shí)現(xiàn)該接口,控件則自動(dòng)具有了參與回傳數(shù)據(jù)的處理能力。開發(fā)人員可以通過實(shí)現(xiàn)接口相關(guān)成員,完成針對回傳數(shù)據(jù)的處理邏輯。

實(shí)際上,ASP.NET中絕大多數(shù)服務(wù)器控件都引發(fā)從客戶端到服務(wù)器的回傳,并且讀者實(shí)現(xiàn)的很多服務(wù)器控件也必須引發(fā)回傳。因此,以上兩個(gè)接口對于實(shí)現(xiàn)控件事件非常重要。對于它們,本節(jié)僅簡單介紹一下。在隨后的文章中,讀者將通過典型示例,詳細(xì)了解實(shí)現(xiàn)接口成員,捕獲回傳事件,處理回傳數(shù)據(jù)的具體方法。

另外,ASP.NET增強(qiáng)了有關(guān)回調(diào)處理方面的功能。例如,使用System.Web.UI.ICallbackEventHandler接口和Page.GetCallbackEventReference方法等。通過這些對象的應(yīng)用可實(shí)現(xiàn)在客戶端運(yùn)行服務(wù)器端代碼,從而避免丟失客戶端狀態(tài)并且不導(dǎo)致服務(wù)器往返的處理開銷。這些內(nèi)容與服務(wù)器控件事件之間有著一些聯(lián)系。然而,由于回調(diào)應(yīng)用在ASP.NET服務(wù)器控件中應(yīng)用較少。因此,將不作過多說明。

4. 小結(jié)

從技術(shù)發(fā)展的角度來講,ASP.NET技術(shù)從1.x升級到2.0版本,在ASP.NET服務(wù)器控件事件開發(fā)方面沒有任何明顯的修改。如果讀者已經(jīng)了解了ASP.NET 1.x下創(chuàng)建服務(wù)器控件事件的內(nèi)容,那么可以按照過去1.x的方法和思路進(jìn)行開發(fā)。下面一篇文章,筆者將通過典型示例介紹ASP.NET服務(wù)器控件捕獲回傳事件的實(shí)現(xiàn)方法。

【編輯推薦】

  1. ASP.NET控件開發(fā)技巧之關(guān)閉基類不必要的功能
  2. ASP.NET控件開發(fā)技巧之使用HtmlTextWriter類淺析
  3. ASP.NET控件開發(fā)技巧之ComboBox顯示淺析
  4. ASP.NET控件開發(fā)基礎(chǔ)之自定義控件淺析
  5. ASP.NET服務(wù)器控件Render方法的使用淺析
責(zé)任編輯:仲衡 來源: 天極開發(fā)
相關(guān)推薦

2009-08-10 14:25:33

ASP.NET服務(wù)器控

2009-08-03 18:00:00

ASP.NET服務(wù)器控

2009-08-05 17:11:51

ASP.NET控件開發(fā)ASP.NET服務(wù)器控

2009-08-06 11:24:50

ASP.NET服務(wù)器控

2009-08-07 10:34:56

ASP.NET控件開發(fā)

2009-07-30 16:52:38

復(fù)合控件ASP.NET服務(wù)器控

2009-08-06 13:08:23

ASP.NET控件開發(fā)

2009-08-07 15:24:16

ASP.NET模板控件

2009-08-07 17:49:44

控件設(shè)計(jì)器

2009-07-28 09:46:53

ASP.NET服務(wù)器控

2009-08-06 10:10:31

ASP.NET服務(wù)器控ASP.NET Ren

2009-08-06 11:05:48

ASP.NET服務(wù)器控

2009-08-06 18:32:00

ASP.NET控件開發(fā)ASP.NET復(fù)合控件

2009-08-07 15:34:15

ASP.NET數(shù)據(jù)綁定

2009-08-04 13:10:05

ASP.NET服務(wù)器控

2009-08-10 14:08:15

ASP.NET服務(wù)器控ASP.NET組件設(shè)計(jì)

2011-07-12 15:17:02

ASP.net服務(wù)器控件

2009-08-04 17:18:37

2009-08-06 18:18:27

ASP.NET控件開發(fā)ASP.NET復(fù)合控件

2009-07-27 17:25:53

ASP.NET驗(yàn)證控件
點(diǎn)贊
收藏

51CTO技術(shù)棧公眾號