ASP.NET - 伺服器控制元件



控制元件是圖形使用者介面的小型構建塊,包括文字框、按鈕、複選框、列表框、標籤以及眾多其他工具。使用者可以使用這些工具輸入資料、進行選擇並指示其偏好。

控制元件還用於結構性工作,例如驗證、資料訪問、安全性、建立母版頁以及資料操作。

ASP.NET 使用五種型別的 Web 控制元件,它們是

  • HTML 控制元件
  • HTML 伺服器控制元件
  • ASP.NET 伺服器控制元件
  • ASP.NET Ajax 伺服器控制元件
  • 使用者控制元件和自定義控制元件

ASP.NET 伺服器控制元件是 ASP.NET 中使用的主要控制元件。這些控制元件可以分為以下幾類

  • 驗證控制元件 - 用於驗證使用者輸入,它們透過執行客戶端指令碼工作。

  • 資料來源控制元件 - 這些控制元件提供與不同資料來源的資料繫結。

  • 資料檢視控制元件 - 這些是各種列表和表格,可以繫結到資料來源中的資料以進行顯示。

  • 個性化控制元件 - 用於根據使用者的資訊,根據使用者偏好個性化頁面。

  • 登入和安全控制元件 - 這些控制元件提供使用者身份驗證。

  • 母版頁 - 這些控制元件在整個應用程式中提供一致的佈局和介面。

  • 導航控制元件 - 這些控制元件有助於導航。例如,選單、樹檢視等。

  • 富控制元件 - 這些控制元件實現特殊功能。例如,AdRotator、FileUpload 和 Calendar 控制元件。

使用伺服器控制元件的語法為

<asp:controlType  ID ="ControlID" runat="server" Property1=value1  [Property2=value2] />

此外,Visual Studio 具有以下功能,有助於生成無錯誤的程式碼

  • 在設計檢視中拖放控制元件
  • IntelliSense 功能,顯示並自動完成屬性
  • 屬性視窗,直接設定屬性值

伺服器控制元件的屬性

具有視覺外觀的 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 獲取或設定當控制元件停用時應用於渲染的 HTML 元素的 CSS 類。
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 伺服器控制元件的 Tab 索引。
TagKey 獲取與該 Web 伺服器控制元件對應的 HtmlTextWriterTag 值。
TagName 獲取控制元件標記的名稱。
TemplateControl 包含此控制元件的模板。
TemplateSourceDirectory 獲取包含此控制元件的頁面或控制元件的虛擬目錄。
ToolTip 獲取或設定滑鼠指標懸停在 Web 伺服器控制元件上時顯示的文字。
UniqueID 唯一識別符號。
ViewState 獲取狀態資訊的字典,該字典在同一頁面的多個請求中儲存和還原伺服器控制元件的檢視狀態。
ViewStateIgnoreCase 它指示 StateBag 物件是否不區分大小寫。
ViewStateMode 獲取或設定此控制元件的檢視狀態模式。
Visible 它指示伺服器控制元件是否可見。
Width 獲取或設定 Web 伺服器控制元件的寬度。

伺服器控制元件的方法

下表提供了伺服器控制元件的方法

方法 描述
AddAttributesToRender 新增需要呈現到指定的 HtmlTextWriterTag 的 HTML 屬性和樣式。
AddedControl 在將子控制元件新增到控制元件物件的 Controls 集合後呼叫。
AddParsedSubObject 通知伺服器控制元件已解析元素(XML 或 HTML),並將元素新增到伺服器控制元件的控制元件集合。
ApplyStyleSheetSkin 將頁面樣式表中定義的樣式屬性應用於控制元件。
ClearCachedClientID 基礎結構。將快取的 ClientID 值設定為 null。
ClearChildControlState 刪除伺服器控制元件的子控制元件的控制元件狀態資訊。
ClearChildState 刪除所有伺服器控制元件的子控制元件的檢視狀態和控制元件狀態資訊。
ClearChildViewState 刪除所有伺服器控制元件的子控制元件的檢視狀態資訊。
CreateChildControls 用於建立子控制元件。
CreateControlCollection 建立一個新的 ControlCollection 物件來儲存子控制元件。
CreateControlStyle 建立用於實現所有樣式相關屬性的樣式物件。
DataBind 將資料來源繫結到伺服器控制元件及其所有子控制元件。
DataBind(Boolean) 將資料來源繫結到伺服器控制元件及其所有子控制元件,並可以選擇引發 DataBinding 事件。
DataBindChildren 將資料來源繫結到伺服器控制元件的子控制元件。
Dispose 使伺服器控制元件能夠在從記憶體中釋放之前執行最終清理操作。
EnsureChildControls 確定伺服器控制元件是否包含子控制元件。如果否,則建立子控制元件。
EnsureID 為沒有識別符號的控制元件建立識別符號。
Equals(Object) 確定指定的物件是否等於當前物件。
Finalize 允許物件嘗試釋放資源並在物件被垃圾回收之前執行其他清理操作。
FindControl(String) 在當前命名容器中搜索具有指定 id 引數的伺服器控制元件。
FindControl(String, Int32) 在當前命名容器中搜索具有指定 id 和整數的伺服器控制元件。
Focus 將輸入焦點設定為控制元件。
GetDesignModeState 獲取控制元件的設計時資料。
GetType 獲取當前例項的型別。
GetUniqueIDRelativeTo 返回指定控制元件的 UniqueID 屬性的字首部分。
HasControls 確定伺服器控制元件是否包含任何子控制元件。
HasEvents 指示控制元件或任何子控制元件是否註冊了事件。
IsLiteralContent 確定伺服器控制元件是否僅儲存文字內容。
LoadControlState 還原控制元件狀態資訊。
LoadViewState 恢復檢視狀態資訊。
MapPathSecure 檢索虛擬路徑(絕對或相對)對映到的物理路徑。
MemberwiseClone 建立當前物件的淺複製。
MergeStyle 將指定樣式中任何非空白元素複製到 Web 控制元件,但不覆蓋控制元件的任何現有樣式元素。
OnBubbleEvent 確定伺服器控制元件的事件是否向上傳遞到頁面的 UI 伺服器控制元件層次結構。
OnDataBinding 引發資料繫結事件。
OnInit 引發 Init 事件。
OnLoad 引發 Load 事件。
OnPreRender 引發 PreRender 事件。
OnUnload 引發 Unload 事件。
OpenFile 獲取用於讀取檔案的 Stream。
RemovedControl 在子控制元件從控制元件物件的控制元件集合中移除後呼叫。
Render 將控制元件呈現到指定的 HTML 編寫器。
RenderBeginTag 將控制元件的 HTML 開啟標籤呈現到指定的編寫器。
RenderChildren 將伺服器控制元件子元素的內容輸出到提供的 HtmlTextWriter 物件,該物件寫入要在客戶端呈現的內容。
RenderContents 將控制元件的內容呈現到指定的編寫器。
RenderControl(HtmlTextWriter) 將伺服器控制元件內容輸出到提供的 HtmlTextWriter 物件,並在啟用跟蹤時儲存有關控制元件的跟蹤資訊。
RenderEndTag 將控制元件的 HTML 關閉標籤呈現到指定的編寫器。
ResolveAdapter 獲取負責呈現指定控制元件的控制元件介面卡。
SaveControlState 儲存自頁面回發到伺服器以來發生的任何伺服器控制元件狀態更改。
SaveViewState 儲存 TrackViewState 方法呼叫後修改的任何狀態。
SetDesignModeState 設定控制元件的設計時資料。
ToString 返回表示當前物件的字串。
TrackViewState 使控制元件跟蹤對其檢視狀態的更改,以便可以將其儲存在物件的檢視狀態屬性中。

示例

讓我們來看一個特定的伺服器控制元件 - 樹形檢視控制元件。樹形檢視控制元件屬於導航控制元件。其他導航控制元件包括:選單控制元件和站點地圖路徑控制元件。

在頁面上新增一個樹形檢視控制元件。從任務中選擇“編輯節點…”。使用樹形檢視節點編輯器編輯每個節點,如所示

ASP.NET Edit Nodes

建立節點後,在設計檢視中看起來如下所示

ASP.NET Edit Nodes2

“自動格式化…”任務允許您格式化樹形檢視,如所示

ASP.NET 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;
            }
         }
      }
   }
}

執行頁面以檢視效果。您將能夠展開和摺疊節點。

ASP.NET Control Nodes
廣告

© . All rights reserved.