探討ASP.NET 2.0的Web控制項改進之概述

來源:互聯網
上載者:User
asp.net|web|控制項    一、 引言

  到目前為止,你可能已經瞭解了大量的ASP.NET 2.0新特徵-主版頁面面,主題,提供者,等等……所有這樣內容都相當精彩;但是,你是否瞭解到有關定製Web控制項開發方面的重大變化?這正是我在本文中所想討論的。如果你已經從事於控制項開發,那麼,我想本文所描述的ASP.NET 2.0中的新的改進特徵會立即應用於你的控制項開發中。

  首先應該注意的是,你以前使用ASP.NET 1.1(或1.0)開發的所有Web控制項在2.0版本下將繼續良好運行-微軟並沒有破壞你的現有代碼。在本文中,我將向你介紹的所有相關內容,包括許多新的令人激動的技術,所有這些你都可以添加到現有控制項或在新的控制項環境中使用。

  【作者注】本文假定你對定製Web控制項開發已經有一個基本瞭解。在本文中,我以一個增強版本的EmailContact控制項為例對ASP.NET 2.0中的Web控制項改進技術作全面探討。

   二、 改進

  表格1描述了ASP.NET 2.0在定製Web控制項開發方面所作的大部分的重大改進。在本系列文章中,我將對這些特徵展開逐一討論。

  表格1:ASP.NET 2.0 Web控制項改進功能。

改進 描述
新的基類 ASP.NET 2.0中又引入了一些新的基類供你派生自己的控制項。後面,我重點介紹一個控制項-CompositeControl。
ControlState 這是我們所熟悉的ViewState的"嫡親"。如今,ControlState中已經不再需要使用專門的方法進行狀態管理;另一方面,當控制項使用者在一個網站(或頁面)上關閉狀態管理機制時,有助於使你避免出錯。
靈敏標籤 這是令Windows控制項開發人員相當興奮的新功能!在本文中,我將向你展示如何在你自己的定製控制項中加入這樣的功能。
模板設計時刻編輯 在1.1版本中,要對控制項範本添加設計時刻編輯能力是相當困難的。幸好,ASP.NET 2.0使得添加這個功能相當容易。在本系列文章的最後一部分中我將討論這個問題。
自動格式化 這也是一個巨大的改進!在使用DataGrid控制項時你可以從一個預定義格式的列表中選擇既定格式。ASP.NET 2.0使得在你的自訂控制項中加入這一功能也非常容易。
Web資源 這是我十分喜歡的一個改進,因為我總是不時地開發與映像有關的一些控制項。在ASP.NET 2.0中,現在你發行就緒一個控制項的DLL,而且不必再考慮別的什麼內容。也就是說,現在,你能夠把映像和其它資源嵌入到控制項的DLL檔案內。

   三、 增強EmailContact Web控制項

  本文中的定製EmailContact Web控制項(參考圖1)允許在你的網站中加入一個"contact us"表單,它具有完整的電子郵件功能。在本文中,我將使用該功能增強這一控制項。


圖1.預設狀態下的EmailContact控制項


   四、 一個新的基類

  以前,開發人員都是從WebControl類派生他們的可視化Web控制項。我之所以在此使用了"可視化"一詞是因為,典型情況上,沒有在瀏覽器中產生任何內容的控制項都是派生自Control類。這一點並沒有改變-你應該繼續使用該Control類來派生任何這樣的非可視化控制項-它們執行不可見功能或在瀏覽器中產生除可視化HTML內容之外的任何其它內容。而且,在開發可視化Web控制項時,你還應該繼續使用WebControl類。然而,我們所開發的大多數複合控制項都是為了利用現有控制項的功能。在這種情況下,你應該總是從WebControl類進行派生,但是你還要記住另外一些有關細節-否則的話,有可能導致許多問題。

  複合控制項必須實現INamingContainer介面,並且需要包括在你的控制項類中。這個介面能夠確保在你的控制項及其可以產生的整個控制項層次中的所有的HTML標籤中都具有唯一的標籤命名。當你在單個頁面上存在多個相同類型的複合控制項的情況下,這是相當關鍵的。在這樣的情況下,你需要確保任何產生的子項目都具有唯一的名稱。忘記實現該介面能夠導致各種問題的出現。

  在ASP.NET 2.0以前,複合控制項開發人員還需要記住在一個控制項的Render方法中調用EnsureChildControls。在我以前的文章中曾經向你介紹如何重載該Render方法並且在調用基類的Render方法前調用這個方法。要使控制項在Visual Studio設計時刻正確產生這一步是必要的;否則,有可能帶來許多不便。

  上面兩個步驟在複合控制項開發中如此普遍,以致於許多開發人員往往都會構建一個包括這兩個細節的基類,然後從該基類下派生他們所有的新的複合控制項。作為代替,ASP.NET 2.0提供了(更準確地說是"名字為")CompositeControl。藉助於這個類來構建你的複合控制項,你就不必再記住實現INamingContainer或從Render方法中執行一個EnsureChildControls調用了。

  另外,還存在其它一些新的基類,例如用於資料繫結的控制項等,在此不再贅述。

相關文章

Cloud Intelligence Leading the Digital Future

Alibaba Cloud ACtivate Online Conference, Nov. 20th & 21st, 2019 (UTC+08)

Register Now >

11.11 Big Sale for Cloud

Get Unbeatable Offers with up to 90% Off,Oct.24-Nov.13 (UTC+8)

Get It Now >

Alibaba Cloud Free Trial

Learn and experience the power of Alibaba Cloud with a free trial worth $300-1200 USD

Learn more >

聯繫我們

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

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