在我們的項目開發中,由於ASP.NET的服務器控件功能有限,所以我們經常會自己定義特定的服務器控件,來滿足開發中特定的業務要求。可見知道如何開發ASP.NET服務器控件是非常有必要的。
其實簡單的實現ASP.NET服務器控件不是很難,以前園子中也有大牛介紹過相應的內容,這裡站在巨人的肩膀上也來分享下開發ASP.NET服務器控件的方法和自己的一些體會。寫給新手,高手繞過。
學習ASP.NET的服務器控件開發,個人認為最好的方式就是自己去實踐,當然理論知識也是很重要的,但是如果我們只是看理論的知識,可能會被裡面的一些概念鬧糊塗,看著看著就睡著了,如果自己動手創做出一個自己的控件,效果就不一樣了。
下面就通過實例創建一個簡單的服務器控件:
首先我們創建一個類庫工程SelfWebControl。在同一解決方案中我們在創建一個ASP,NET Web應用程序(用來測試我們得控件)
namespace SelfWebControl
{
public class ControlA:Control//Control類中定義了所有ASP.NET服務器控件共享的屬性和方法
{
}
}
我將ControlA類繼承Control類,Control類是.NET中所有控件的基類,其中包含了控件共有的屬性和方法。
Control類
公共屬性:
ClientID 獲取由 ASP.NET 生成的服務器控件標識符。
Controls 獲取 ControlCollection 對象,該對象表示 UI 層次結構中指定服務器控件的子控件。
EnableViewState 獲取或設置一個值,該值指示服務器控件是否向發出請求的客戶端保持自己的視圖狀態以及它所包含的任何子控件的視圖狀態。
ID 獲取或設置分配給服務器控件的編程標識符。
NamingContainer 獲取對服務器控件的命名容器的引用,此引用創建唯一的命名空間,以區分具有相同 Control.ID 屬性值的服務器控件。
Page 獲取對包含服務器控件的 Page 實例的引用。
Parent 獲取對頁 UI 層次結構中服務器控件的父控件的引用。
Site 獲取有關服務器控件所屬 Web 站點的信息(原文自MSDN,但是我認為不對,應該是指組件的“容器”站點,並非 web site)。
TemplateSourceDirectory 獲取包含當前服務器控件的 Page 或 UserControl 的虛擬目錄。
UniqueID 獲取服務器控件的唯一的、以分層形式限定的標識符。
Visible 獲取或設置一個值,該值指示服務器控件是否作為 UI 呈現在頁上。
公共方法:
DataBind 將數據源綁定到被調用的服務器控件及其所有子控件。
Dispose 使服務器控件得以在從內存中釋放之前執行最後的清理操作。
Equals(從 Object 繼承) 已重載。確定兩個 Object 實例是否相等。
FindControl 已重載。在當前的命名容器中搜索指定的服務器控件。
GetHashCode(從 Object 繼承) 用作特定類型的哈希函數,適合在哈希算法和數據結構(如哈希表)中使用。
GetType(從 Object 繼承) 獲取當前實例的 Type。
HasControls 確定服務器控件是否包含任何子控件。
RenderControl 將服務器控件的內容輸出到所提供的 HtmlTextWriter 對象中;如果已啟用跟蹤功能,則存儲有關控件的跟蹤信息。
ResolveUrl 根據傳遞給 TemplateSourceDirectory 屬性的值,將相對 URL 解析為絕對 URL。
ToString(從 Object 繼承) 返回表示當前 Object 的 String。