ID,ClientID和UniqueID - .net語言 -

ID,ClientID和UniqueID

時間:2010-01-27 00:02:11   來源:   評論:加載中...   點擊:加載中...
在ASP.NET 的服務器端控件中有三種關于 ID 的屬性,即 ID, ClientID 和 UniqueID。ID 表示控件的服務器端編程的標識符,我們寫"服...

在ASP.NET 的服務器端控件中有三種關于 ID 的屬性,即 ID, ClientID 和 UniqueID。

ID 表示控件的服務器端編程的標識符,我們寫"服務器端的代碼",就要用到這個 ID, 通過這個 ID 可以在服務器端對服務器端控件的屬性、方法和時間進行編程訪問。(可寫)

ClientID 表示由服務器端生成的客戶端控件的ID,"經常用于在客戶端腳本中訪問服務器控件所呈現的 HTML 元素"。一般情況下與服務器端的 ID 相同,有時,不能為控件生成唯一的名稱,例如,如果Repeater 空間在它的某個模板中包含一個 Label 控件,則將在客戶端生成多個該 Lable 的 HTML 元素, 為防止命名沖突,ASP.NET 為各個服務器控件生成一個唯一的 ClientID ,ClientID 通過將子控件的父控件的 UniqueID 值與控件的 ID 值連接生成,各個部分之間以下劃線 _ 連接。(只讀)

UniqueID 用于獲取服務器控件的唯一的、以分層方式表示的標識符。當將控件放置到重復控件(Repeater、DataList和DataGrid)中時,將可能生成多個服務器端的控件,這就需要區分服務器端的各個控件,以使它們的 ID 屬性不沖突。UniqueID 通過將子控件的父控件的 UniqueID 值與控件的 ID 值連接生成,各個部分之間以IdSeparator 屬性指定的字符連接。默認情況下, IdSeparator 屬性為冒號字符 (:)。此屬性為在 .Net Framework2.0種新增加。js與aps.net交互一般情況下使用<%=控件ID.ClientID%>就OK了,但如果用到母版頁(MasterPage)則要使用UniqueID獲得獲值。(只讀)

 


例如,創建以下 ASP.NET 服務器控件:

<asp:textbox id="TextBox1" runat="server" text="Sample Text" />

ClientID 屬性被設置為 TextBox1,在基于 HTML 的瀏覽器中,其結果元素與以下所示類似:

<input name="TextBox1" type="text" value="Sample Text" id="Text1" />

 

可以使用這些屬性在客戶端腳本中引用服務器控件。通常,必須在客戶端腳本中用完全限定引用來引用控件;如果控件是頁面中 form 元素的子控件,則一般使用document.forms[0].TextBox1.value = "New value"在客戶端腳本中引用控件。

有些控件將子控件呈現在頁面中。這些控件中包括數據列表控件(如GridView、DetailsView、FormView、DataList 和 Repeater 控件)、用戶控件和 Web 部件控件。可以看到,在這些情況下,子控件可能不具有唯一的 ID,這可能是因為子控件是在某個模板中定義的,該模板會為每個數據行(數據列表控件)生成新的控件實例,也可能是因為可以從外部源(用戶控件和 Web 部件控件)將父控件添加到頁面中對于每個子控件:控件的 UniqueID 被呈現為 name。控件的 ClientID 被呈現為 id 屬性。

ClientID 和 UniqueID 屬性都基于原始的 ID 屬性,并用足夠的信息進行了修改,以保證頁面中結果的唯一性。ClientID的值可在客戶端腳本中引用。如果在瀏覽器中顯示一個具有命名容器的頁面,則可以查看該頁面的源文件,從中找到唯一的 ID,這些 ID 作為命名容器子控件的 name 屬性和 id 屬性生成。但是,建議不要依賴于直接引用在瀏覽器中看到的 ID。因為用于生成子控件唯一ID 的公式可能會發生變化,應當獲取子控件的 ClientID 屬性值,并用該值來引用該子控件。例如,您可能會在頁面中動態創建客戶端腳本。如果客戶端腳本引用一個子控件,則應獲取該子控件的 ClientID 屬性,并將其嵌入到動態腳本中。

例2:

 

假設有子控件:

<asp:TextBox ID = "textboxInfo" runat ="server" Text = "Test Text box" name="haha"></asp:TextBox>

那么我們可以在腳本中這樣寫

var tempt = '<%=textboxInfo.ClientID%>';

var controlname = document.getElementById(tempt).name;

var controlid = document.getElementById(tempt).id;

還有一個問題我們需要注意:在使用UniqueID和ClientID的時候要小心點,千萬不要“迫不及待”地使用了這些屬性,在運行的過程中可能會碰到一些讓人頭疼的問題.

 


注意
除了用來分隔 ID 值的是下劃線字符而不是 IdSeparator 屬性指定的字符以外,為控件生成的 ClientID 值與 UniqueID 值相同。默認情況下,IdSeparator 屬性設置為冒號字符 (:)。由于 ClientID 值不包含冒號字符,因此,它可以用于不支持包含冒號的 ID 的 ECMAScript。ClientID 值經常用于以編程方式訪問為客戶端腳本中的控件呈現的 HTML 元素。有關詳細信息,請參見 ASP.NET 網頁中的客戶端腳本。



相關熱詞搜索:

 
上一篇:DataGrid的自動編號問題
下一篇:C#中COOKIES的實現存取
收藏 將此文推薦給朋友
分享到:
10个数复式三中三多少组公式