Web Form 控制項識別

更新:2007 年 11 月

每個 ASP.NET Web 網頁的控制項必須是可唯一識別的。一般來說,必須將值指派給控制項的 ID 屬性,以便唯一識別這個控制項。該值成為控制項的執行個體 (Instance) 名稱 - 也就是說,可用這個名稱在程式碼中參考控制項。例如,如果將 TextBox 控制項的 ID 屬性設為 Text1,就能在程式碼中以 Text1 參考控制項。

有一些資料繫結控制項,其中包含 DataListRepeaterGridViewFormViewDetailsView 控制項,將扮演其他 (子系) 控制項的容器。當這些控制項執行時,會產生多個子控制項的執行個體。例如,如果建立其中包含 Label 控制項的 DataList 範本,當網頁執行時,網頁中 Label 控制項的執行個體數目,會與 DataList 控制項資料來源中的記錄數目一樣多。

注意事項:

使用範本的控制項 (例如 DataListRepeater 控制項) 會裝載範本物件。例如,當 DataList 控制項執行時,會建立多個 DataListItem 類別的執行個體。這些樣板物件逐一包含個別的控制項,如標記、文字方塊、按鈕等等。

由於控制項可在同一個網頁上多次具現化,因此可在不同網頁中重新使用控制項。ASP.NET 網頁架構提供機制,確保網頁上和應用程式中的控制項具有唯一的識別項。它也提供尋找這些個別控制項的方法,如此您就能在自己的程式碼中加以管理。

命名容器

能像其他控制項的容器般作用的控制項,會為其子控制項產生命名容器,或是 ID 命名空間。藉由提供這項命名容器,控制項可確保在整個應用程式中,其子控制項的 ID 屬性是唯一的 (控制項會藉由實作 INamingContainer 介面產生命名容器)。在執行階段建立子控制項時,命名容器會與子控制項的 ID 屬性結合,建立每個子控制項的 UniqueID 屬性值。因此 UniqueID 屬性會成為控制項的完整識別項,參考其命名容器和控制項的個別 ID 值。

在上述範例中,Label 控制項的多個執行個體是在父 DataList 控制項的命名容器 (命名空間) 中建立的。每個 Label 控制項的 UniqueID 屬性將反映這個命名空間,其格式看起來會像 DataList1:_ctl:MyLabel、DataList1:_ct2:MyLabel 等。

注意事項:

撰寫程式碼時,請不要參考使用所產生 UniqueID 屬性值的控制項。您可以將 UniqueID 屬性視為控制代碼 (例如,藉由將其傳遞到處理序),但不應依賴它的特定結構。

除了每個容器控制項提供其子控制項的命名容器以外,網頁本身也會對所有它的子控制項提供命名容器。這樣就會在應用程式中為網頁上所有的控制項建立唯一的命名空間。

使用 NamingContainer 屬性

子控制項可透過 NamingContainer 屬性參考其命名容器。這個屬性會傳回 Control 型別的物件,可將它轉換成合適的 DataList 控制項、DataListItem 物件等。

在需要從子控制項存取容器控制項的屬性時,參考命名容器特別有用。例如,在子控制項 DataBinding 事件的處理常式中,可藉由從命名容器中取得 DataItem 物件加以存取。

注意事項:

NamingContainer 屬性不一定要與 Parent 屬性參考相同的控制項。例如,在 Repeater 控制項中,您可能會有包含資料表的項目範本,而資料表中又包含 Label 控制項。標記 (Label) 的父控制項是表格儲存格 (例如,HtmlTableCell 物件),但它的命名容器為 DataListItem 物件,因為是 DataListItem 定義 Label 控制項的命名空間,而不是資料表。

參考控制項

如果您的網頁含有在執行階段產生的控制項,例如 DataListRepeaterGridView 控制項範本中的控制項,就無法使用其 ID 直接參考它們,因為 ID 並不是唯一的。然而,有幾個方法可以用來尋找網頁中的個別控制項。如需詳細資訊,請參閱以程式設計方式存取 ASP.NET 控制項

請參閱

概念

Web Form 控制項 ID 解析