服務器控件開發基礎
當開發一個服務器控件時首先要明白其內部的工作機理其實在頁面內部每一點由返回的HTML代碼無論是簡單的<span>標簽或者是button按鈕或者是復雜的gridview控件都是由繼承自SystemWebUIControl的對象生成的
控件的屬性
控制控件的方法大多是通過控件的屬性來操作的通過控制服務器控件的屬性就可以相應的改變服務器生成的html
下面是一個服務器控件的屬性:
在Visual Studio裡當通過屬性窗口來改變控件的屬性時VS會自動將屬性添加到對應的aspx的HTML裡而在html內添加屬性時在屬性窗口裡也會對應顯示更改過的屬性視圖比如
<asp:Button ID=Button runat=server Text=Button CommandName=cName />
在屬性窗口裡會對應顯示如下圖
當然某些控件的屬性會略有不同比如常用的Label控件
<asp:Label ID=Label runat=server>這裡是Text屬性</asp:Label>
在開始符號和結束符號之間的內容會被設置成Text屬性
當然最實用也是我們最常用的是通過C#以編程的方式動態的修改控件的屬性這就不說了
控件的方法
控件通過方法來操作更加復雜的控件操作通常在控件的方法內部會有很復雜的過程一般包括幾個內部函數和屬性的組合比如
private void LoadDropDownList()
{
ArrayList list = new ArrayList();
listAdd(Hello);
listAdd(Goodbye);
GridViewDataSource = list;
GridViewDatabind();
}
這樣通過調用Databind()方法就可以講gridview和數據源進行綁定
控件的事件
控件通過事件來通知其它類或者客戶端其內部的某個狀態被改變事件是一種靈活的機制當控件與客戶端進行交互的時候事件會通過Http Post方法和服務器進行交互通過自動回傳機制WEB開發中的事件表現起來就會像開發Windows FORM程序一樣(當然速度是無法和Form相比的)
在Visual Studio中可以在屬性窗口中通過黃色的閃電圖標來顯示和控制控件的事件如下
當雙擊相應的事件後會在後台產生默認的處理方法命名規則為控件名_事件名
WEB Page本質是一個控件樹
在aspx頁面的頭部將Trace=true設置到Page後頁面會顯示相應的追蹤信息在Control Tree那一節你會發現整個頁面其實就是一個控件樹如圖:
根控件?
OK既然頁面的本質是一個控件樹按照C#是完全面向對象的語言慣例(所有的一切都是繼承於SystemObject)那麼所有控件共同的父類是什麼?
在中所有的控件被分布在個主要命名空間中分別為
SystemWebUI
SystemWebUIWebControls
SystemWebUIHtmlControls
它們之間的關系如下圖所示
SystemWebUI命名空間
由上圖可知SystemWebUI處於繼承樹頂端的而SystemWebUIControl是所有控件的基礎所有的控件必須強制直接或者間接的繼承Control類而直接繼承Control類的是Page類以及UserControl類
From:http://tw.wingwit.com/Article/program/net/201311/12910.html