自定義控件開發(fā)之生命周期(一)_第1頁
自定義控件開發(fā)之生命周期(一)_第2頁
自定義控件開發(fā)之生命周期(一)_第3頁
自定義控件開發(fā)之生命周期(一)_第4頁
自定義控件開發(fā)之生命周期(一)_第5頁
已閱讀5頁,還剩46頁未讀 繼續(xù)免費閱讀

下載本文檔

版權說明:本文檔由用戶提供并上傳,收益歸屬內容提供方,若內容存在侵權,請進行舉報或認領

文檔簡介

自定義控件開發(fā)自定義控件開發(fā)

一、概述:

在.net中我們會有很多功能很強大的控件,這大大滿足了多數(shù)專案的需求,但在日新月異的軟件世界中,往往專案的需求是千種萬樣的。所以為了使?jié)M足一些專案的特定功能的需求,并且能多次復用,自定義控件完全是為這一需求量身定做的,自定義控件的原則是有什么樣的需求就可以做出什么樣的控件。自定義控件開發(fā)

二、我們來看看幾個問題

2.1:什么是自定義控件? 2.2:自定義控件需要一些什么樣的周邊基礎知識?2.3:通過本次主題的學習,我們能達到一個什么樣的水平?(希望大家在學習的時候要有一顆平常心,現(xiàn)在的技術日新月異,推陳出新.以致于我們初學者學習沒有一點方向感,隨著時間的推移將自己原本有著強烈興趣的那顆心慢慢被磨滅掉了.在此,我以一個過來人,有著十幾年開發(fā)經(jīng)驗的”老人”給大家提醒忠告:技術是靠一點一滴積累起來的,需要你不斷的一個接著一個知識點的去學習和實踐總結.”蟻毀大堤”的故事告訴我們可以用螞蟻的精神去學習專業(yè)知識,當你日復一日的去堅持自己專業(yè)的學習和總結,總有一天你定會成為這個行業(yè)的姣姣者.最后一句:專家絕對不是短時間塑造出來的.切記,切記.)

自定義控件開發(fā)

三、我們來解析一下這幾個問題

3.1:什么是自定義控件? 3.2:自定義控件需要一些什么樣的周邊基礎知識?3.3:通過本次主題的學習,我們能達到一個什么樣的水平?3.1:什么是自定義控件?

從功能的角度來講,自定義控件實際上就是按照預定規(guī)則設計好的程序,這個程序片段是建立在有著某個特定規(guī)律的功能上.當然也有可能是通用的.是可擴展的,也是可復用的.之所以會花經(jīng)歷去設計自定義控件,是因為能幫我們解決項目當中重復出現(xiàn)的功能需求.

從技術的角度來講的話,可以讓我們更深層次的去了解.net內部的運行機制,從原來”似懂非懂”的狀態(tài)有著質的提升.并大大提高我們對專業(yè)的學習興趣.

自定義控件開發(fā)

三、我們來解析一下這幾個問題

3.1:什么是自定義控件? 3.2:自定義控件需要一些什么樣的周邊基礎知識?3.3:通過本次主題的學習,我們能達到一個什么樣的水平?3.2:自定義控件需要一些什么樣的周邊基礎知識?

自定義控件開發(fā)在.net課程里面屬于高級課程,所以在學習之前必須要有一定的基礎,主要是要具備.net基本運行原理,生命周期,面向對象的思想的認識,接口/抽象類的理解,事件委托等

自定義控件開發(fā)

三、我們來解析一下這幾個問題

3.1:什么是自定義控件? 3.2:自定義控件需要一些什么樣的周邊基礎知識?3.3:通過本次主題的學習,我們能達到一個什么樣的水平?3.3:通過本次主題的學習,我們能達到一個什么樣的水平?

我們學習目的最基本的一個目標就是要能獨立開發(fā)自定義控件并將用于實際項目開發(fā)當中去.其次是通過本次主題的學習我們能更加深入的了解到.net的內部運行機制,熟悉生命周期.對.net框架的認識絕對會有一個質的提升,以增強接下來對.net學習的底氣.當然也要記住,任何一門技術越深入花的時間越多,理解也會更難.我們唯有堅持不懈,勇往直前,克服重重困難,才能到達勝利的終點.

自定義控件開發(fā)

四、本次課的主題(生命周期)4.1:什么是生命周期

4.2:什么是應用程序的生命周期

4.3:什么是頁面的生命周期? 4.4:什么是控件的生命周期?

自定義控件開發(fā)

4.1:什么是生命周期

世間萬事萬物都被認為有生命周期,通俗的理解就是一個事物從生到死的這個過程.我們把它稱為生命周期.但我更愿意理解為一個事物從開始到結束的這么一個過程.是不是

.net里面的生命周期也是這么一個概念呢!答案是肯定的.所以說一個頁面的產生前是開始,一個頁面的產生后是結束.理解生命周期的概念并不難,難的是要理解從開始到結束的這個過程到底經(jīng)歷了什么..net框架的生命周期極其復雜,所以我們應該分而析之.我們現(xiàn)在主要將之分為三類:應用程序的生命周期,頁面的生命周期,控件的生命周期.

自定義控件開發(fā)

4.1.1:什么是生命周期-圖片示例

客戶端向服務器端請求頁面的過程自定義控件開發(fā)

4.1.2:什么是生命周期-圖片示例

客戶端向服務器端請求頁面的過程自定義控件開發(fā)

4.1.3:什么是生命周期-圖片示例

客戶端向服務器端請求頁面的過程自定義控件開發(fā)

4.2:什么是應用程序的生命周期

應用程序的生命周期分兩個部分來解析,當用戶(第一個)去請求某個網(wǎng)站(應用程序)頁面時,往往第一次是很慢的,為什么呢?因為第一次打開時需要進行編譯應用程序頂級對象(稍后再解釋),然后進行緩存.這就是第一次訪問慢的主因.

那么解析頁面之前到底經(jīng)歷了什么呢?這就是我們要講的第二部分,解析頁面之前就是走的應用程序的生命周期,實際就是應用程序域的管道流程(這么多概念???),這個流程是不可能繞過的.我們舉個例子,去醫(yī)院看病,哪個流程是不能繞過的.

吾認為進醫(yī)院大門是不能繞過的,這個一進一出和應用程序的生命周期非常相似.自定義控件開發(fā)

4.2.1:什么是應用程序的生命周期

要是這么理解的話,應用程序的生命周期是不是隨著頁面的請求完成而結束呢?不是這樣的.我們再想想醫(yī)院的例子,如果小張患有兩種疾病,他看完一種病后(相當于一個頁面請求完成),會不會出醫(yī)院再進醫(yī)院看第二種病呢!如果這樣的話,他就真的病的不輕.那這和應用程序的生命周期有什么關聯(lián)呢

!應用程序的生命周期是這樣去定義的,當啟動應用程序后,應用程序域會一直保持在那里.以供其它客戶端的請求響應,不需要每次都會經(jīng)歷從”生到死”的過程,這是這個流程每次都會跑,只不過第一次跑的流程和非第一次跑的有些不一樣.自定義控件開發(fā)

4.2.2:什么是應用程序的生命周期

注意那個ASP.NET的部分自定義控件開發(fā)

4.2.3:什么是應用程序的生命周期

這是多個人訪問網(wǎng)站應用程序時的一個場景,所以理解這個應用程序的生命周期尤其重要.自定義控件開發(fā)

4.2.4:什么是應用程序的生命周期

這是之前所提到的第一次訪問應用程序時會進行對應用程序的頂級項進行編譯,然后進行緩存,以便于在后面其它客戶端請求時的調用.自定義控件開發(fā)

4.2.5:什么是應用程序的生命周期

這是之前所提到的第一次訪問應用程序時會進行對應用程序的頂級項進行編譯,然后進行緩存,以便于在后面其它客戶端請求時的調用.自定義控件開發(fā)

4.2.6:什么是應用程序的生命周期

這些選項是根據(jù)需要來進行即時編譯.自定義控件開發(fā)

4.2.7:什么是應用程序的生命周期

前面我們對應用程序的生命周期有了一個大致的了解.我們接下來說說詳細的流程.

自定義控件開發(fā)

4.2.8:什么是應用程序的生命周期

這些事件對于希望在引發(fā)關鍵請求管道事件時運行代碼的網(wǎng)頁開發(fā)人員很有用。

如果是在開發(fā)自定義模塊,并且希望對發(fā)往管道的所有請求都調用該模塊,則這些事件也很有用。

自定義模塊實現(xiàn)

IHttpModule

接口。

在IIS7.0集成模式下,必須在模塊的

Init

方法中注冊事件處理程序

自定義控件開發(fā)

4.2.9:什么是應用程序的生命周期

自定義控件開發(fā)

4.2.10:什么是應用程序的生命周期

前面我們所講的應用程序的管道事件都是由系統(tǒng)自動流轉的,我們人為的代碼無法干預.能有沒有在進頁面之前我們能自動編程,讓框架執(zhí)行到我們自定義的程序(模塊)呢.答案是肯定的,這里有一點小技巧,如果要執(zhí)行到自己的程序,必須滿足框架所給出的要求,要求就是我們的功能模塊必須實現(xiàn)某個接口,然后要某個公開的位置實現(xiàn)注冊,讓框架知道你寫了程序,這樣它才能執(zhí)行到你的代碼.那是什么接口呢!接著往下看.自定義控件開發(fā)

4.2.11:什么是應用程序的生命周期

這些事件對于希望在引發(fā)關鍵請求管道事件時運行代碼的網(wǎng)頁開發(fā)人員很有用。

如果是在開發(fā)自定義模塊,并且希望對發(fā)往管道的所有請求都調用該模塊,則這些事件也很有用。

自定義模塊實現(xiàn)

IHttpModule

接口,必須在模塊的

Init

方法中注冊事件處理程序.自定義控件開發(fā)

4.2.11:什么是應用程序的生命周期

1.BeginRequest

事件發(fā)出信號表示創(chuàng)建任何給定的新請求。

此事件始終被引發(fā),并且始終是請求處理期間發(fā)生的第一個事件

2.AuthenticateRequest

事件發(fā)出信號表示配置的身份驗證機制已對當前請求進行了身份驗證

自定義控件開發(fā)

4.2.12:什么是應用程序的生命周期

3.PostAuthenticateRequest當安全模塊已建立用戶標識時發(fā)生.

4.AuthorizeRequest

事件發(fā)出信號表示ASP.NET已對當前請求進行了授權

5.PostAuthorizeRequest

事件發(fā)出信號表示ASP.NET已對當前請求進行了授權

6.

ResolveRequestCache

事件在ASP.NET完成授權事件以使緩存模塊從緩存中為請求提供服務后發(fā)生,從而繞過事件處理程序的執(zhí)行自定義控件開發(fā)

4.2.13:什么是應用程序的生命周期

7.PostResolveRequestCache事件在ASP.NET跳過當前事件處理程序的執(zhí)行并允許緩存模塊滿足來自緩存的請求時發(fā)生.

8.

MapRequestHandler

事件將根據(jù)所請求資源的文件擴展名,選擇相應的處理程序。

處理程序可以是本機代碼模塊,如IIS7.0

StaticFileModule,也可以是托管代碼模塊.也就是說自己可以寫一段代碼植入進來給框架(生命周期流程中)去執(zhí)行.可以去web.config文檔中去注冊.

自定義控件開發(fā)

4.2.14:什么是應用程序的生命周期

9.PostMapRequestHandler事件在ASP.NET已將當前請求映射到相應的事件處理程序時發(fā)生

.

10.AcquireRequestState

事件當ASP.NET獲取與當前請求關聯(lián)的當前狀態(tài)(如會話狀態(tài))時發(fā)生

.

11.PostAcquireRequestState事件在已獲得與當前請求關聯(lián)的請求狀態(tài)(例如會話狀態(tài))時發(fā)生

自定義控件開發(fā)

4.3:什么是頁面的生命周期

ASP.NET頁運行時,此頁將經(jīng)歷一個生命周期,在生命周期中將執(zhí)行一系列處理步驟。

這些步驟包括初始化、實例化控件、還原和維護狀態(tài)、運行事件處理程序代碼以及進行呈現(xiàn)。

了解頁生命周期非常重要,因為這樣做您就能在生命周期的合適階段編寫代碼,以達到預期效果。 如果您要開發(fā)自定義控件,就必須熟悉頁生命周期,以便正確進行控件初始化,使用視圖狀態(tài)數(shù)據(jù)填充控件屬性以及運行控件行為代碼。

控件的生命周期基于頁的生命周期,但是頁引發(fā)許多您需要在自定義控件中處理的事件.自定義控件開發(fā)

4.3.1:什么是頁面的生命周期

一般來說,頁要經(jīng)歷下表概述的各個階段。

除了頁生命周期階段以外,在請求前后還存在應用程序階段,但是這些階段并不特定于頁.也就是說不管是哪個頁面都會經(jīng)過這個生命周期.

生命周期的某些部分僅當頁處理為回發(fā)時才出現(xiàn)。

對于回發(fā),部分頁回發(fā)過程中(當您使用

UpdatePanel

控件)與整頁回發(fā)過程中的頁生命周期是一樣.

自定義控件開發(fā)

4.3.2:什么是頁面的生命周期

接下來逐一介紹頁面生命周期詳細步驟.

頁請求發(fā)生在頁生命周期開始之前。

用戶請求頁時,ASP.NET將確定是否需要分析和編譯頁(從而開始頁的生命周期),或者是否可以在不運行頁的情況下發(fā)送頁的緩存版本以進行響應.

1.頁請求自定義控件開發(fā)

4.3.3:什么是頁面的生命周期

在啟動階段,將設置頁屬性如

Request

Response。

在此階段,頁還將確定請求是回發(fā)請求還是新請求,并設置IsPostBack

屬性。

頁還設置

UICulture

屬性應.

2.啟動解析自定義控件開發(fā)

4.3.4:什么是頁面的生命周期

頁初始化期間,可以使用頁中的控件,并將設置每個控件的

UniqueID

屬性。

如果需要,還會向頁應用于母版頁和主題。

如果當前請求是回發(fā)請求,則回發(fā)數(shù)據(jù)尚未加載,并且控件屬性值尚未還原為視圖狀態(tài)中的值

.

3.頁面初始化自定義控件開發(fā)

4.3.5:什么是頁面的生命周期

加載期間,如果當前請求是回發(fā)請求,則將使用從視圖狀態(tài)和控件狀態(tài)恢復的信息加載控件屬性

.

4.加載自定義控件開發(fā)

4.3.6:什么是頁面的生命周期

如果請求是回發(fā)請求,則將調用控件事件處理程序。

之后,將調用所有驗證程序控件的

Validate

方法,此方法將設置各個驗證程序控件和頁的

IsValid

屬性

.

5.回發(fā)事件處理自定義控件開發(fā)

4.3.7:什么是頁面的生命周期

在呈現(xiàn)之前,會針對該頁和所有控件保存視圖狀態(tài)。

在呈現(xiàn)階段中,頁會針對每個控件調用

Render

方法,它會提供一個文本編寫器,用于將控件的輸出寫入頁的

Response

屬性的

OutputStream

對象中

.

6.呈現(xiàn),輸出自定義控件開發(fā)

4.3.8:什么是頁面的生命周期

完全呈現(xiàn)頁并已將頁發(fā)送至客戶端、準備丟棄該頁后,將引發(fā)

Unload

事件。

此時,將卸載頁屬性(如Response

Request)并執(zhí)行清理

.

7.卸載自定義控件開發(fā)

4.3.9:什么是頁面的生命周期

上面介紹的是頁面生命周期的各個階段,是一種文字說明.而實際的各個階段都會有對應的行為,我們稱之為生命周期頁事件.在頁生命周期的每個階段中,頁將引發(fā)可運行您自己的代碼進行處理的事件。

對于控件事件,通過以聲明方式使用特性(如

onclick)或以使用代碼的方式,均可將事件處理程序綁定到事件。 頁還支持自動事件連接,即ASP.NET將查找具有特定名稱的方法,并在引發(fā)了特定事件時自動運行這些方法。

如果

@

Page

指令的

AutoEventWireup

特性設置為

true,頁事件將自動綁定至使用命名約定

Page_事件(如Page_Load

Page_Init)的方法.

自定義控件開發(fā)

4.3.10:什么是頁面的生命周期

下面列出了最常用的頁生命周期事件。

除了列出的事件外還有其他事件;不過,大多數(shù)頁處理方案不使用這些事件。而是主要由ASP.NET網(wǎng)頁上的服務器控件使用,以初始化和呈現(xiàn)它們本身。

如果要編寫自定義ASP.NET服務器控件,則需要詳細了解這些事件(后面會有介紹)

.

自定義控件開發(fā)

4.3.11:什么是頁面的生命周期

自定義控件開發(fā)

4.3.12:什么是頁面的生命周期

1.PreInit事件自定義控件開發(fā)

4.3.13:什么是頁面的生命周期

在所有控件都已初始化且已應用所有外觀設置后引發(fā)。

各個控件的

Init

事件在頁的

Init事件之前發(fā)生。使用該事件來讀取或初始化控件屬性2.Init事件自定義控件開發(fā)

4.3.14:什么是頁面的生命周期

在頁的初始化階段結束時引發(fā)。

Init

InitComplete

事件之間僅發(fā)生一個操作:開啟對視圖狀態(tài)更改的跟蹤。

視圖狀態(tài)跟蹤使控件可以保留所有以編程方式添加到

ViewState集合的值。

在開啟視圖狀態(tài)跟蹤之前,所有添加到視圖狀態(tài)的值都會在回發(fā)期間丟失??丶ǔT谝l(fā)其

Init

事件后立即開啟視圖狀態(tài)跟蹤。 使用此事件對要在下一個回發(fā)后務必保留的視圖狀態(tài)進行更改.3.InitComplete事件自定義控件開發(fā)

4.3.15:什么是頁面的生命周期

在頁為自身和所有控件加載視圖狀態(tài)之后以及處理

Request

實例包括的回發(fā)數(shù)據(jù)之后引發(fā)

.4.PreLoad事件自定義控件開發(fā)

4.3.16:什么是頁面的生命周期

Page

對象對

Page

對象調用

OnLoad

方法,然后以遞歸方式對每個子控件執(zhí)行相同操作,直到加載完本頁和所有控件為止。

各個控件的

Load

事件在頁的

Load

事件之后發(fā)生。 使用

OnLoad

事件方法來設置控件中的屬性并建立數(shù)據(jù)庫連接.5.Load事件自定義控件開發(fā)

4.3.17:什么是頁面的生命周期

.6.控件事件自定義控件開發(fā)

4.3.18:什么是頁面的生命周期

在事件處理階段結束時引發(fā),對需要加載頁上的所有其他控件的任務使用該事件.7.LoadComplete事件自定義控件開發(fā)

4.3.19:什么是頁面的生命周期

Page

對象創(chuàng)建呈現(xiàn)頁所需的所有控件(包括組合控件的子控件)之后引發(fā).(為此,Page

對象

溫馨提示

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

評論

0/150

提交評論