控制項是在圖形使用者介面中的小功能區塊,其中包括文字框,按鈕,複選框,列錶框,標籤,和許多其它工具。利用這些工具,使用者可以輸入數據,進行選擇並註明自己的喜好。
控制項也用於結構性工作,如驗證,資料訪問,安全保證,建立母版頁和資料操作。
ASP.NET 使用五種類型的Web 控件,它們是:
HTML 控制項
HTML 伺服器控制項
ASP.NET 伺服器控制項
ASP.NET Ajax 伺服器控制項
使用者控制項和自訂控件
ASP.NET 伺服器控制項是在ASP.NET 中使用的主要控制項。這些控制項可被分成以下幾類:
驗證控制項- 用來驗證使用者輸入,並透過執行客戶端腳本進行工作。
資料來源控制項- 提供資料綁定到不同的資料來源功能。
資料視圖控制項- 此控制項為各種清單和表格,可以顯示從資料來源綁定的資料。
個人化控制- 根據使用者的喜好,基於使用者資訊進行頁面個人化設定。
登陸和安全控制- 提供使用者身份驗證。
母版頁- 提供整個應用程式一致的佈局和介面。
導航控制- 幫助使用者導航。例如,選單,樹視圖等。
豐富功能控制- 實作特殊功能。例如:AdRotator, FileUpload, 和日曆控制項。
使用伺服器控制項的基本語法是:
<asp:controlType ID ="ControlID" runat="server" Property1=value1 [Property2=value2] />
此外,Visual Studio還具有以下特點,以協助產生無錯誤程式碼:
在設計視圖中拖曳和丟棄控制項。
顯示及自動完成特性的智慧感知功能。
直接設定屬性值的屬性視窗。
具有視覺化功能的ASP.NET 伺服器控制項源自於WebControl 類,並且繼承該類別的所有屬性,事件以及方法。
WebControl 類別本身以及其他不具有視覺化功能的伺服器控制項都來自System.Web.UI.Control 類別。例如,PlaceHolder 控製或XML 控制項。
ASP.Net 伺服器控制項繼承了WebControl 和System.Web.UI.Control 類別的所有屬性,事件,以及方法。
下表顯示了通用於所有伺服器控制項的屬性:
屬性 | 描述 |
---|---|
AccessKey | 同時按下該按鍵以及Alt 鍵以將焦點移至控制項。 |
Attributes | 它是不對應控制項屬性的任意屬性(僅用於視圖呈現)的集合。 |
BackColor | 背景色。 |
BindingContainer | 包含資料綁定的控制項。 |
BorderColor | 邊框顏色。 |
BorderStyle | 邊框樣式。 |
BorderWidth | 邊框寬度。 |
CausesValidation | 引起驗證時顯示。 |
ChildControlCreated | 表示伺服器控制項的子控制項是否已建立。 |
ClientID | HTML 標記的控制項ID。 |
Context | 與伺服器控制項關聯的HttpContext 物件。 |
Controls | 控制項內全部控制項的集合。 |
ControlStyle | Web 伺服器控制項的樣式。 |
CssClass | CSS 類別。 |
DataItemContainer | 若命名器執行IDataItemContainer,則為命名器提供參考。 |
DataKeysContainer | 若命名器執行IDataKeysControl,則為命名器提供參考。 |
DesignMode | 表示控制在設計介面是否被使用。 |
DisabledCssClass | 當控制項停用時,取得或設定CSS 類別來套用呈現的HTML 元素。 |
Enabled | 表示控制項是否已停用。 |
EnableTheming | 表示主題是否適用於控制項。 |
EnableViewState | 表示是否維持控制項的視圖狀態。 |
Events | 取得代表控制項的事件處理程序的清單。 |
Font | 字體設定。 |
Forecolor | 前景顏色。 |
HasAttributes | 表示控制項是否具有屬性組。 |
HasChildViewState | 表示目前伺服器控制項的子控制項是否具有任何已儲存的視圖狀態設定。 |
Height | 高度的像素或百分比。 |
ID | 控制項的標識符。 |
IsChildControlStateCleared | 表示包含在該控制項內部的控制項是否具有控制項狀態。 |
IsEnabled | 取得表示控制項是否啟用的值。 |
IsTrackingViewState | 表示伺服器控制項是否會將變更儲存到其視圖狀態。 |
IsViewStateEnabled | 表示視圖狀態是否對該控制項啟用。 |
LoadViewStateById | 表示控制項是否是由ID 而非索引來參與載入其視圖狀態。 |
Page | 包含控制項的頁面。 |
Parent | 家長監護功能。 |
RenderingCompatibility | 指定呈現的HTML 將與之相容的ASP.NET 版本。 |
Site | 當設計介面顯示時容納目前控制的承載器。 |
SkinID | 取得或設定適用於控制項的皮膚。 |
Style | 取得將在Web 伺服器控制項的外部標籤作為樣式屬性顯示的文字屬性的集合。 |
TabIndex | 取得或設定Web 伺服器控制項的索引標籤。 |
TagKey | 取得應該Web 伺服器控制項的HtmlTextWriterTag 值。 |
TagName | 取得控制項標籤的名稱。 |
TemplateControl | 包含該控制項的範本。 |
TemplateSourceDirectory | 取得頁面的虛擬目錄或包含在該控制項中的控制項。 |
ToolTip | 取得或設定當滑鼠指標停在Web 伺服器控制項時顯示的文字。 |
UniqueID | 唯一的識別符。 |
ViewState | 取得能夠穿越同一頁面的多重請求後保存和恢復伺服器控制項視圖狀態的狀態資訊字典。 |
ViewStateIgnoreCase | 表示StateBag 物件是否不區分大小寫。 |
ViewStateMode | 取得或設定該控制項的視圖狀態。 |
Visible | 表示伺服器控制項是否可見。 |
Width | 取得或設定Web 伺服器控制項的寬度。 |
伺服器控制項的方法在以下表格中呈現:
方法 | 描述 |
---|---|
AddAttributesToRender | 新增需要呈現指定HtmlTextWriterTag 的HTML 屬性和樣式。 |
AddedControl | 在子控制項新增到控制項物件的控制項集合後呼叫。 |
AddParsedSubObject | 通報伺服器控制項一個元素,XML 或HTML 已被解析,並將該元素新增至伺服器控制項的控制項集合。 |
ApplyStyleSheetSkin | 將在頁面樣式表中定義的樣式屬性套用到控制項。 |
ClearCachedClientID | 基礎設施。設定快取的ClientID 值設定為null。 |
ClearChildControlState | 為伺服器控制項的子控制項刪除控制項狀態資訊。 |
ClearChildState | 為所有伺服器控制項的子控制項刪除視圖狀態和控制項狀態資訊。 |
ClearChildViewState | 為所有伺服器控制項的子控制項刪除視圖狀態資訊。 |
CreateChildControls | 用於建立子控制項。 |
CreateControlCollection | 建立一個用於保存子控制項的新控制項集合。 |
CreateControlStyle | 建立一個用於實現所有與樣式相關的屬性的樣式物件。 |
DataBind | 將資料來源綁定到伺服器控制項及其所有子控制項。 |
DataBind(Boolean) | 將資料來源及可引發DataBinding 事件的選項綁定到伺服器控制項及其所有子控制項。 |
DataBindChildren | 將資料來源綁定到伺服器控制項的子控制項。 |
Dispose | 啟用一個伺服器控制項在其從記憶體中釋放出來前去執行最後的清理操作。 |
EnsureChildControls | 確定伺服器控制項是否包含子控制項。若沒有,則建立子控制項。 |
EnsureID | 為沒有標識符的控制項建立一個標識符。 |
Equals(Object) | 確定指定物件是否等於目前物件。 |
Finalize | 允許一個物件去嘗試釋放資源並在物件被回收站回收前執行其他清理操作。 |
FindControl(String) | 搜尋目前命名容器中具有指定id 參數的伺服器控制項。 |
FindControl(String, Int32) | 搜尋目前命名容器中具有指定id 參數和整數的伺服器控制項。 |
Focus | 為控制項設定輸入焦點。 |
GetDesignModeState | 取得控制項的設計時資料。 |
GetType | 取得目前實例的類型。 |
GetUniqueIDRelativeTo | 傳回指定控制項的唯一ID 屬性的預固定部分。 |
HasControls | 確定伺服器控制項是否包含子控制項。 |
HasEvents | 表示事件是否被控製或其他子控制項註冊。 |
IsLiteralContent | 決定伺服器控制項是否僅含有文字內容。 |
LoadControlState | 恢復控制項狀態資訊。 |
LoadViewState | 恢復視圖狀態資訊。 |
MapPathSecure | 檢索絕對的或相對的虛擬路徑對應的實體路徑。 |
MemberwiseClone | 建立目前物件的淺複製。 |
MergeStyle | 複製指定樣式的Web 控制項的任一非空白元素,但不覆寫該控制項現有的任何樣式元素。 |
OnBubbleEvent | 決定伺服器控制項的事件是否透過頁面的UI 伺服器控制項層級。 |
OnDataBinding | 引發資料綁定事件。 |
OnInit | 引發Init 事件。 |
OnLoad | 引發載入事件。 |
OnPreRender | 引發PreRender 事件。 |
OnUnload | 引發卸載事件。 |
OpenFile | 取得用於讀取檔案的流。 |
RemovedControl | 在子控制項從控制項物件的控制項集合中移除後呼叫。 |
Render | 顯示控制項到指定的HTML 作者。 |
RenderBeginTag | 顯示控制項的HTML 開口標籤到指定作者。 |
RenderChildren | 輸出伺服器控制項子層級的內容到提供的HtmlTextWriter 物件中,從而編寫呈現在客戶端上的內容。 |
RenderContents | 顯示控制內容到指定作者。 |
RenderControl(HtmlTextWriter) | 輸出伺服器控制項內容到提供的HtmlTextWriter 物件並在啟用追蹤的情況下保存關於控制項的追蹤資訊。 |
RenderEndTag | 顯示控制項的HTML 結束標籤到指定作者。 |
ResolveAdapter | 取得負責呈現指定控制項的控制項適配器。 |
SaveControlState | 儲存自頁面回傳到伺服器後出現的伺服器控制項的狀態改變。 |
SaveViewState | 儲存呼叫TrackViewState 方法之後修改的任意狀態。 |
SetDesignModeState | 為控制項設定設計時資料。 |
ToString | 傳回代表目前物件的字串。 |
TrackViewState | 引發控制項追蹤其視圖狀態的變化,使其可以儲存在該物件的視圖狀態屬性中。 |
讓我們來看看一個特定的伺服器控制項- 樹型視圖控制項。樹狀視圖控制項屬於導覽控制項。其他導航控制是:選單控制和SiteMapPath 控制項。
在頁面上新增樹狀視圖控制項。從任務中選擇編輯結點...使用樹狀視圖結點編輯器編輯每個結點,如下所示:
當成功建立結點之後,設計視圖下會有如下顯示:
AutoFormat... 任務可讓您規定樹狀視圖的格式,如下所示:
在頁面上新增一個標籤控制項和文字方塊控制項並分別命名為lblmessage 和txtmessage。
寫幾行程式碼,以確保當一個特定結點被選取時,標籤控制項會顯示結點文字且文字方塊顯示所有其下的子結點(如有)。後台文件的程式碼應如下所示:
using System;using System.Collections;using System.Configuration;using System.Data;using System.Linq;using System.Web;using System.Web.Security;using System.Web.UI;using System.Web.UI.HtmlControls;using System.Web.UI.WebControls;using System.Web.UI.WebControls.WebParts;using System.Xml.Linq;namespace eventdemo { public partial class treeviewdemo : System.Web.UI.Page { protected void Page_Load(object sender, EventArgs e) { txtmessage.Text = " "; } protected void TreeView1_SelectedNodeChanged(object sender, EventArgs e) { txtmessage.Text = " "; lblmessage.Text = "Selected node changed to: " + TreeView1.SelectedNode.Text; TreeNodeCollection childnodes = TreeView1.SelectedNode.ChildNodes; if(childnodes != null) { txtmessage.Text = " "; foreach (TreeNode t in childnodes) { txtmessage.Text += t.Value; } } } }}
執行頁面以觀看效果,您將可以展開和折疊結點。