ASP.NET 2.0伺服器控制項開發精要

來源:互聯網
上載者:User
 利用ASP.NET 2.0技術,建立Web自訂伺服器控制項並不是一件輕鬆的事情。因為,這需要開發人員瞭解並能夠靈活應用多種Web開發技術,例如,CSS樣式表、用戶端指令碼語言、.NET開發語言、伺服器控制項開發技術,甚至是當前最火的Ajax技術等等。雖然現實如此"艱難",但是這種開發技術也不是真的難到不可掌握。事事都要從頭做起。本文將針對利用ASP.NET 2.0技術,建立Web自訂伺服器控制項的基礎知識進行詳細介紹,內容包括:伺服器控制項概念、控制項類型、生命週期等。
    1. 什麼是Web伺服器控制項
  
    在ASP.NET 2.0中,Web伺服器控制項是指在伺服器上執行程式邏輯的組件。這個組件可能產生一定的使用者介面,也可能不包括使用者介面。每個伺服器控制項都包含一些成員對象,以便開發人員調用,例如,屬性、事件、方法等。
  
    通常情況下,伺服器控制項都包含在ASP.NET頁面中。當運行頁面時,.NET執行引擎將根據控制項成員對象和程式邏輯定義完成一定的功能。例如,在用戶端轉譯使用者介面。這時,使用者可與控制項發生互動行為,當頁面被使用者提交時,控制項可在伺服器端引發事件,並由伺服器端根據相關事件處理常式來進行事件處理。伺服器控制項是WebForm編程模型的重要元素,它們構成了一個新的、基於控制項的表單程式的基礎。通過這種方式可以簡化Web應用程式的開發,提高應用程式的開發效率。
  
    伺服器控制項的廣泛應用,簡化了應用程式的開發,提高了工作效率。那麼,何時應建立並使用自訂伺服器控制項呢?下面列舉了在三種具體適用情況:
  
    (1)某個現有伺服器控制項基本符合應用要求,但是,缺少某些特殊的功能,這時可以通過從現有控制項中派生並重寫其屬性、方法或事件來自訂伺服器控制項。
  
    (2)需要使用的伺服器控制項結合了兩個或多個現有控制項的功能,例如,封裝一個按鈕和一個文字框的複合控制項。此時可以通過建立伺服器控制項達到這一目的。
  
    (3)現有伺服器控制項(或其組合)均不符合應用的要求。對於這種情況,可以通過從基類派生的方式來建立自訂伺服器控制項。
  
    2 伺服器控制項的類型
  
    ASP.NET 2.0提供了多種伺服器控制項。根據伺服器控制項定義方式,可分為以下3種類型:HTML伺服器控制項、ASP.NET標準伺服器控制項和自訂伺服器控制項。
  
    (1)HTML伺服器控制項
  
    HTML伺服器控制項派生自名字空間System.Web.UI.HtmlControls。它們由普通HTML控制項(指HTML語言已定義的控制項,例如,Button、Input等)轉換而來,其轉譯輸出,基本上與普通HTML控制項一致。預設情況下,伺服器端很難控制Web頁面上的普通HTML控制項,但是,通過將普通HTML控制項轉換為HTML伺服器控制項的方法,開發人員則能夠輕而易舉對其進行編程式控制制。
  
    將普通HTML控制項轉換為HTML伺服器控制項方法比較簡單。一般情況下,通過兩個步驟完成轉換:
  
    (1)在普通HTML控制項特性中添加Runat="Server"屬性;
  
    (2)設定ID屬性。通過轉換,普通HTML控制項的相關屬性、事件、方法等將全部映射到HTML伺服器控制項中,由此,通過編程即可在頁面處理過程中引用並控制該HTML伺服器控制項。
  
    HTML伺服器控制項具有以下幾個重要特點:
  
    一、可在伺服器上使用物件導向技術對其進行編程式控制制,這為編程開發提供了便利。
  
    二、自動維護檢視狀態。在頁面表單到伺服器端往返期間,使用者在HTML伺服器控制項中輸入的值將在頁面回傳中自動維護。
  
    三、與驗證控制項進行互動,便於驗證使用者是否在控制項輸入了適當的資訊。
  
    四、允許在HTML伺服器控制項中自訂屬性。開發人員可以將任何需要的屬性添加到HTML伺服器控制項的屬性集中,頁架構將讀取並呈現它們而不更改其他任何功能。
(2)ASP.NET標準伺服器控制項
  
    ASP.NET標準伺服器控制項均在名字空間System.Web.UI.WebControls中定義。所謂"標準"是指這類伺服器控制項內建於 ASP.NET 2.0架構中,是預先定義的。這類控制項並不一對一映射到HTML伺服器控制項,它們比HTML伺服器控制項具有更加豐富的功能,並且更加抽象。
  
    與ASP.NET 1.x相比,ASP.NET 2.0新增了50多個標準伺服器控制項。按照控制項所提供的功能,ASP.NET標準伺服器控制項可分為以下6種類型:
  
    (1)標準控制項:主要是指傳統的Web表單控制項,例如TextBox、Button、Panel等控制項。它們有一組標準化的屬性、事件和方法,因此能夠使開發工作變得簡單易行。
  
    (2)資料控制項:該類控制項可細分為兩種類型:資料來源控制項和資料繫結控制項。資料來源控制項主要實現資料來源串連、SQL語句/預存程序執行,返回資料集合等功能。具體包括SqlDataSource、AccessDataSource、XmlDataSource、SiteMapDataSource、 ObjectDataSource等。資料繫結控制項包括Repeater、DataList、GridView、DetailsView、 FormView等。這類控制項主要實現資料顯示、提供編輯、刪除等相關使用者介面等。通常情況下,首先,需要使用資料來源控制項串連資料庫,並返回資料集合,然後,利用資料繫結控制項實現資料顯示、更新、刪除等功能。由於Visual Studio 2005設計時的強大支援下,開發人員可以快速實現以上功能,甚至不需要編寫一行代碼。
  
    (3)驗證控制項:它們是一組特殊的控制項,控制項中包含驗證邏輯以測試使用者輸入。具體包括:RequiredFieldValidator、RangeValiedator、 RegularExpressionValidator、CompareValidator等等。開發人員可以將驗證控制項附加到輸入控制項,測試使用者對該輸入控制項輸入的內容。驗證控制項可用於檢查輸入欄位,對照字元的特定值或模式進行測試,其目的是驗證某個值是否在限定範圍之內或者其他邏輯。
  
    (4)網站導覽控制項:該類控制項可與網站導覽資料結合,實現網站導覽功能。具體包括:Menu、SiteMapPath、TreeView。對於大型網站,網站導覽控制項都有著廣泛應用前景。
  
    (5)WebParts控制項:Web組件是一項非常了不起的功能,利用它能夠建立具備高度個人化特徵的Web應用程式。實現Web組件功能需要 WebParts控制項支援,ASP.NET 2.0提供了以下相關控制項,例如WebPartManager、WebPartZone、EditorZone、CatalogZone、 PageCatalogPart、AppearanceEditorPart等等。
  
    (6)登入控制項:這類控制項可快速實現使用者登入及相關功能,例如,顯示登入狀態、密碼恢複、建立新使用者等。具體包括:LoginView、Login、CreateUserWizard、LoginStatus等等。
  
    ASP.NET標準伺服器控制項由於是官方提供,因此,從系統內部就提供了對它們的強大支援。對於開發人員而言,這些控制項是構建Web應用程式的主力軍。

    (3)自訂伺服器控制項
  
    自訂伺服器控制項派生自名字空間System.Web.UI.Control或System.Web.UI.WebControls。這種伺服器控制項完全由開發人員自行設計開發,開發人員可自訂UI、功能、屬性、方法、事件等特徵,這是自訂伺服器控制項與ASP.NET標準伺服器控制項本質的區別。
  
    常見的自訂伺服器控制項分為4種:複合控制項、驗證控制項、模板控制項和資料繫結控制項。
  
    (1)複合控制項:該類控制項包含兩個或多個已存在控制項。它複用了子控制項提供的實現來進行控制項呈現、事件處理及其他功能。
  
    (2)驗證控制項:與上文所述標準伺服器控制項中的驗證控制項定義相同。
  
    (3)模板控制項:該類控制項提供了一種稱為模板的通用功能。模板控制項本身不提供使用者介面,而是通過內聯模板提供,這意味著模板控制項允許頁面開發人員自訂該控制項的使用者介面。
  
    (4)資料繫結控制項:與上文所述標準伺服器控制項中的資料繫結控制項定義相同。
  
    另外,除了以上4類控制項之外,自訂伺服器控制項具有以下特點:
  
    (1)靈活性強:開發人員可以根據應用需要,自訂其中的UI、功能、屬性、方法和事件等。
  
    (2)樣式支援:由於自訂伺服器控制項可能派生自System.Web.UI.WebControls,因此通過繼承的Style屬性可定義樣式,例如字型、高度、寬度、顏色等。
  
    (3)提供對標準伺服器控制項的擴充功能:自訂伺服器控制項可在繼承標準伺服器控制項的基礎上,擴充或改進相關屬性、方法、功能等,甚至可以將不同的伺服器控制群組合起來,形成複合控制項。
  
     (4)易於部署:具有"隨插即用"的特徵,開發人員只要將編譯好的自訂伺服器控制項複製到相關的bin目錄即可使用。
  
    (5)難於建立:開發自訂伺服器控制項需要開發人員員精通多方面技術,同時,還需要耗費大量的精力和時間。 
3、伺服器控制項生命週期簡介
    伺服器控制項的生命週期是建立伺服器控制項最重要的概念。作為開發人員,必須對伺服器控制項生命週期深刻理解。當然,這不是一朝一夕就可以做到的。對於學習控制項開發技術的初學者,可以不必掌握得非常詳細深入,只需對伺服器控制項的生命週期中的不同階段有一個大致的瞭解即可。
  
    在掌握伺服器控制項生命週期的過程中,讀者要特別注意有關伺服器控制項狀態的相關內容。在重點瞭解生命週期各個階段的同時,對伺服器控制項的狀態變化要注意以下問題:控制項的生命週期何時儲存控制項和恢複其狀態;何時與頁面及其他控制項之間進行互動;何時執行重要的處理邏輯;在各個階段,控制項可使用哪些資訊、保持哪些資料、控制項呈現時處於哪種狀態以及何時輸出顯示標記文本等。如下列舉了伺服器控制項生命週期所要經曆的11個階段。
  
    (1)初始化-- --在此階段中,主要完成兩項工作:一、初始化在傳入Web請求生命週期內所需的設定;二、跟蹤檢視狀態。首先,頁面架構通過預設引發Init事件,並調用OnInit()方法,控制項開發人員可以重寫該方法為控制項提供初始化邏輯。此後,頁面架構將調用TrackViewState方法來跟蹤檢視狀態。需要注意的是:多數情況下,Control基類提供的TrackViewState方法實現已經足夠了。只有在控制項定義了複雜屬性時,開發人員才可能需要重寫TrackViewState方法。
  
    (2)載入檢視狀態----此階段的主要任務是檢查伺服器控制項是否存在以及是否需要將其狀態恢複到它在處理之前的請求結束的狀態。因此該過程發生在頁面回傳過程中,而不是初始化請求過程。在此階段,頁面架構將自動回復ViewState字典。如果伺服器控制項不維持其狀態,或者它有能力通過預設儲存其所有狀態而使用ViewState字典,那麼開發人員則不必實現任何邏輯。針對那些無法在 ViewState字典中儲存的資料類型或者需要自訂狀態管理的情況,開發人員可以通過重寫LoadViewState方法來自訂狀態的恢複和管理。
  
    (3)處理回傳資料----若要使控制項能夠檢查用戶端發回的表單資料,那麼必須實現System.Web.UI.IPostBackDataHandler介面的 LoadPostData()方法。因此只有處理回傳資料的控制項參與此階段。
  
    (4)載入----至此階段開始,控制項樹中的伺服器控制項已建立並初始化、狀態已還原並且表單控制項反映了用戶端的資料。此時,開發人員可以通過重寫OnLoad()方法來實現每個請求共同的邏輯。
  
    (5)發送回傳更改通知----在此階段,伺服器控制項通過引發事件作為一種訊號,表明由於回傳而發生的控制項狀態變化(因此該階段僅用於回傳過程)。為了建立這種訊號,開發人員必須再次使用System.Web.UI.IPostBackDataHandler介面,並實現另一方法- RaisePostBackChangedEvent()。其判斷過程為:如果控制項狀態因回傳而更改,則LoadPostData()返回true;否則返回false。頁面架構跟蹤所有返回true的控制項並在這些控制項上調用RaisePostDataChangedEvent()。
  
    (6)處理回傳事件----該階段處理引起回傳的用戶端事件。為了便於將用戶端事件映射到伺服器端事件上進行處理,開發人員在此階段可以通過實現 System.Web.UI.IPostBackEventHandler介面的RaisePostBackEvent()方法來實現該邏輯。由此途徑,伺服器控制項將成功捕獲回傳的用戶端事件進行伺服器端的相應處理。
  
    (7)預呈現----該階段完成在產生控制項之前所需要的任何工作。通常情況下是通過重寫OnPreRender()方法完成該工作。需要注意的是:在該階段,可以儲存在預呈現階段對控制項狀態所做的更改,而在呈現階段進行的更改則會丟失。
  
    (8)儲存狀態----如果伺服器控制項不維持狀態,或者它有能力通過預設儲存其所有狀態而使用ViewState字典,那麼開發人員不必在該階段實現任何邏輯。因為這個儲存狀態的過程是自動的。如果伺服器控制項需要自訂狀態儲存,或者控制項無法在ViewState字典中儲存特殊的資料類型,則需要通過重寫SaveViewState()方法來實現狀態儲存。
  
    (9)呈現----表示向HTTP輸出資料流中寫入標記文本的過程。開發人員通過重寫Render()方法使其在輸出資料流上自訂標籤文本。
  
    (10)處置----在此階段中,通過重寫Dispose ()方法完成釋放對昂貴資源的引用,如資料庫連結等。
  
    (11)卸載----完成的工作與"處置"階段相同,但是,開發人員通常在Dispose()方法中執行清除,而不處理Unload事件。
  
    4、小結
  
    伺服器控制項在ASP.NET 2.0架構中起著舉足輕重的作用,是構建Web應用程式最關鍵、最重要的組成元素。對於一個優秀的開發人員,掌握伺服器控制項的基礎知識是非常重要的。本文就伺服器控制項的概念、類型、生命週期等關鍵內容進行了介紹。希望讀者能夠將這些內容牢固掌握,為寫出精彩的伺服器控制項打下良好的基礎。
建立Asp.net裡的伺服器控制項和Windows Form的控制項一樣,也有幾種方式:
  
    1、 使用者控制項(user control)
  
    2、 從Control、WebControl派生的自訂控制項
  
    3、 從已有的Asp.net伺服器控制項擴充
  
    使用者控制項以.ascx為副檔名,並儲存為文字檔,使用者控制項不像從Control和WebControl派生下來的伺服器控制項那樣需要先行編譯,當使用者控制項在.aspx頁面中使用的時候,頁面解析器從.aspx檔案中動態地產生一個類,並且將其編譯到一個裝配件中。其優點有:解決了代碼複用,同時每一個使用者控制項有自己的物件模型,其編寫語言和.aspx頁面的語言無關。
  
    從已有的Asp.net伺服器控制項擴充,主要是對.net原生的伺服器控制項的功能加強以適用我們開發和終端使用者的需要。
  
    從Control、WebControl派生的自訂控制項以編譯過的類庫形式部署的。
  
    上述的1和3在本系列中將不做講解,在本系列中只講解從Control、WebControl派生的伺服器控制項。
  
    我們要編寫一個自訂控制項,只要從Control、WebControl繼承即可,Control已經實現了IComponent介面,而WebControl本身又是從Control上派生下來的,因而他們也支援組件的可視化設計。
  
    Render方法和HtmlTextWriter類,當我們從一個Control類派生一個Asp.net伺服器控制項時,Control類為我們提供了可重載的Render和一個HtmlTextWriter類型的執行個體,Render方法就是將伺服器控制項內容發送到提供的 HtmlTextWriter 對象,而HtmlTextWriter封裝了HTML寫文字資料流的功能函數。
  
  using System;
  using System.Collections.Generic;
  using System.Text;
  
  namespace ClassLibrary1
  {
   public class Control1 : System.Web.UI.Control
   {
    protected override void Render(System.Web.UI.HtmlTextWriter writer)
    {
     writer.Write("I'm here.");
    }
   }
  
   public class Control2 : System.Web.UI.WebControls.WebControl
   {
    protected override void Render(System.Web.UI.HtmlTextWriter writer)
    {
     writer.Write("I'm here too.");
    }
   }
  }
  
    上面的代碼裡我們定義了一個Contro1和Control2,他們分別從Control和WebControl繼承下來,那他們之間到底有什麼樣的本質區別呢?先看下面的效果:
  
  
  
   從上面的效果我們不難看出他們之間有什麼區別,WebControl類通過屬性提供了對樣式的支援,比如字型、高度、背景色等等。那我們什麼時候來選擇從Control派生,什麼時候又選擇從WebControl派生呢?如果控制項要產生非可視化的元素或顯示給非HTML用戶端,就從Control派生,如SqlDataSource;如果要提供用戶端產生可視化的HTML,那我們就從WebControl派生,如TextBox。
  http://blog.csdn.net/tielu0144/archive/2007/02/05/1502886.aspx

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.