我們知道一個ASP.NET伺服器控制項有三個ID,即:ID,ClientID和UniqueID。
ID為伺服器控制項的伺服器標示,在伺服器代碼中通過ID來唯一區分伺服器控制項(因此在同一個頁面中ID必須唯一);
ClientID是伺服器控制項在轉化成HTML元素之後在用戶端的ID,為了防止出現命名衝突,ASP.NET 為頁上的各個伺服器控制項自動產生一個唯一的 ClientID 值。ClientID值是通過串連控制項的ID值和它的父控制項的UniqueID 值產生的。產生的 ID 的各個部分以底線 (_) 分隔;
UniqueID是伺服器控制項的唯一的、以分層形式限定的標識符,它也是伺服器控制項轉化成HTML元素之後在用戶端的name標識。
有時候我們要在用戶端使用Javascript通過HTML元素的id來操作HTML元素,如果伺服器控制項在資料繫結控制項中,那麼它最終對應的HTML元素的id和我們平常使用的大不一樣,這使我們操作起來很不方便,特別是我們在用javascript實現資料的全選反選時不方便,因為在操作單個控制項時我們還可以按如下方式編寫javascript代碼:
<script type="text/javascript"><!--
function DoSomething(){
alert('<%= Control.ClientID %>');
}
--></script>
而在ASP.NET中提供了對伺服器控制項的對應的HTML元素的id的控制更強了,增加了ClientIDMode屬性來控制。下面是一個展示ClientIDMode屬性用法的例子,在服務端編碼如下:
<asp:GridView ID="gvUserList" runat="server" AutoGenerateColumns="False">
<Columns>
<asp:TemplateField HeaderText="UserId_AutoId">
<ItemTemplate>
<asp:Label runat="server" ID="lb1" ClientIDMode="AutoID"
Text='<%#eval("UserId") %>' />
</ItemTemplate>
</asp:TemplateField>
<asp:TemplateField HeaderText="UserId_Static">
<ItemTemplate>
<asp:Label runat="server" ID="lb1" ClientIDMode="Static"
Text='<%#eval("UserId") %>' />
</ItemTemplate>
</asp:TemplateField>
<asp:TemplateField HeaderText="UserId_Predictable">
<ItemTemplate>
<asp:Label runat="server" ID="lb1" ClientIDMode="Predictable"
Text='<%#eval("UserId") %>' />
</ItemTemplate>
</asp:TemplateField>
</Columns>
</asp:GridView>
如果我們進行資料繫結之後再查看產生的HTML原始碼,會看到類似的部分:
<table cellspacing="0" rules="all" border="1" id="MainContent_gvUserList" style="border-collapse:collapse;" mce_style="border-collapse:collapse;">
<tr>
<th scope="col">UserId_AutoId</th><th scope="col">UserId_Static</th><th scope="col">UserId_Predictable</th>
</tr>
<tr>
<td><span id="ctl00_MainContent_gvUserList_ctl02_lb1">136</span></td>
<td><span id="lb1">136</span></td>
<td><span id="MainContent_gvUserList_lb1_0">136</span></td>
</tr>
....
</table>
ClientIDMode="AutoID" 時控制項的用戶端ID和我們在早期的ASP.NET沒有什麼區別;
ClientIDMode="Static"時控制項的用戶端ID不會發生變化;
ClientIDMode="Predictable"時控制項的用戶端ID中還帶有資料行標識
(如:id="MainContent_gvUserList_lb1_0"中的“0”即標識在資料來源中的位置為0,即第一條記錄)。
通過指定ClientIDMode屬性可以讓我們很方便控制伺服器端控制項最終產生的HTML元素的ID,這一點也是相當方便的。
源地址:http://blog.csdn.net/zhoufoxcn/archive/2010/05/17/5599115.aspx#