一 引言 到目前為止
你可能已經了解了大量的ASP
NET
新特征
母版頁面
主題
提供者
等等……所有這樣內容都相當精彩
但是
你是否了解到有關定制Web控件開發方面的重大變化?這正是我在本文中所想討論的
如果你已經從事於控件開發
那麼
我想本文所描述的ASP
NET
中的新的改進特征會立即應用於你的控件開發中
首先應該注意的是
你以前使用ASP
NET
(或
)開發的所有Web控件在
版本下將繼續良好運行
微軟並沒有破壞你的現有代碼
在本文中
我將向你介紹的所有相關內容
包括許多新的令人激動的技術
所有這些你都可以添加到現有控件或在新的控件環境中使用
【作者注】本文假定你對定制Web控件開發已經有一個基本了解
在本文中
我以一個增強版本的EmailContact控件為例對ASP
NET
中的Web控件改進技術作全面探討
二 改進 表格
描述了ASP
NET
在定制Web控件開發方面所作的大部分的重大改進
在本系列文章中
我將對這些特征展開逐一討論
表格
:ASP
NET
Web控件改進功能
改進
描述
新的基類
ASP
NET
中又引入了一些新的基類供你派生自己的控件
後面
我重點介紹一個控件
CompositeControl
ControlState
這是我們所熟悉的ViewState的
嫡親
如今
ControlState中已經不再需要使用專門的方法進行狀態管理
另一方面
當控件用戶在一個站點(或頁面)上關閉狀態管理機制時
有助於使你避免出錯
靈敏標簽
這是令Windows控件開發者相當興奮的新功能!在本文中
我將向你展示如何在你自己的定制控件中加入這樣的功能
模板設計時刻編輯
在
版本中
要對控件模板添加設計時刻編輯能力是相當困難的
幸好
ASP
NET
使得添加這個功能相當容易
在本系列文章的最後一部分中我將討論這個問題
自動格式化
這也是一個巨大的改進!在使用DataGrid控件時你可以從一個預定義格式的列表中選擇既定格式
ASP
NET
使得在你的自定義控件中加入這一功能也非常容易
Web資源
這是我十分喜歡的一個改進
因為我總是不時地開發與圖像有關的一些控件
在ASP
NET
中
現在你可以發布一個控件的DLL
而且不必再考慮別的什麼內容
也就是說
現在
你能夠把圖像和其它資源嵌入到控件的DLL文件內
三 增強EmailContact Web控件 本文中的定制EmailContact Web控件(參考圖
)允許在你的站點中加入一個
contact us
表單
它具有完整的電子郵件功能
在本文中
我將使用該功能增強這一控件
圖
缺省狀態下的EmailContact控件
四 一個新的基類 以前
開發者都是從WebControl類派生他們的可視化Web控件
我之所以在此使用了
可視化
一詞是因為
典型情況上
沒有在浏覽器中生成任何內容的控件都是派生自Control類
這一點並沒有改變
你應該繼續使用該Control類來派生任何這樣的非可視化控件
它們執行不可見功能或在浏覽器中生成除可視化HTML內容之外的任何其它內容
而且
在開發可視化Web控件時
你還應該繼續使用WebControl類
然而
我們所開發的大多數復合控件都是為了利用現有控件的功能
在這種情況下
你應該總是從WebControl類進行派生
但是你還要記住另外一些有關細節
否則的話
有可能導致許多問題
復合控件必須實現INamingContainer接口
並且需要包括在你的控件類中
這個接口能夠確保在你的控件及其可以生成的整個控件層次中的所有的HTML標簽中都具有唯一的標簽命名
當你在單個頁面上存在多個相同類型的復合控件的情況下
這是相當關鍵的
在這樣的情況下
你需要確保任何生成的子元素都具有唯一的名稱
忘記實現該接口能夠導致各種問題的出現
在ASP
NET
以前
復合控件開發者還需要記住在一個控件的Render方法中調用EnsureChildControls
在我以前的文章中曾經向你介紹如何重載該Render方法並且在調用基類的Render方法前調用這個方法
要使控件在Visual Studio設計時刻正確生成這一步是必要的
否則
有可能帶來許多不便
上面兩個步驟在復合控件開發中如此普遍
以致於許多開發者往往都會構建一個包括這兩個細節的基類
然後從該基類下派生他們所有的新的復合控件
作為代替
ASP
NET
提供了(更准確地說是
名字為
)CompositeControl
借助於這個類來構建你的復合控件
你就不必再記住實現INamingContainer或從Render方法中執行一個EnsureChildControls調用了
另外
還存在其它一些新的基類
例如用於數據綁定的控件等
在此不再贅述
From:http://tw.wingwit.com/Article/program/net/201311/13316.html