1、簡述
ID是設計的時候自己所指定的ID,是我們分配給伺服器控制項的程式設計識別碼,我們常常使用this.controlid來尋找控制項,那麼這個controlid就是這裡所說的ID.
ClientID是由ASP.Net產生的伺服器控制項得用戶端標識符,當這個控制項產生到用戶端頁面的時候,在用戶端代碼訪問該控制項時就需要通過ClientID來訪問。
UniqueID 伺服器控制項的唯一的、分層的形式限定的標識符。 是當需要參與服務端回傳的時候用的。當將控制項放置到重複控制項(Repeater、DataList和DataGrid)中時,將可能產生多個伺服器端的控制項,這就需要區分伺服器端的各個控制項,以使它們的 ID 屬性不衝突。UniqueID 通過將子控制項的父控制項的 UniqueID 值與控制項的 ID 值串連產生,各個部分之間以 IdSeparator 屬性指定的字元串連。預設情況下, IdSeparator 屬性為冒號字元 (:)。此屬性為在 .Net Framework2.0種新增加。 (UniqueID 的解釋做了參照,本篇重點強調ID與ClientID)
2、程式碼範例解說
看看如下代碼:
<%@ Page Language="C#" AutoEventWireup="true" CodeFile="Default2.aspx.cs" Inherits="Default2" %><!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd"><html xmlns="http://www.w3.org/1999/xhtml" ><head runat="server"> <title>Untitled Page</title></head><script type="text/javascript">function GetValue(){var t=document.getElementById('<%= TextBox1.ClientID %>');t.innerText=2;}</script><body> <form id="form1" runat="server"> <div> <asp:TextBox ID="TextBox1" runat="server"></asp:TextBox></div> <input type="button" runat="server" id="button1" onclick="GetValue();" value="賦值" /> </form></body></html>
有人會問了:var t=document.getElementById("TextBox1");不是也啟動並執行好好的嗎?
答案:在一般的aspx中ID=ClientID(前提是你自己已經設定好了ID值)
看下面代碼,設定了模板頁
<%@ Page Language="C#" MasterPageFile="~/MasterPage.master" AutoEventWireup="true" CodeFile="Default3.aspx.cs" Inherits="Default3" Title="Untitled Page" %><asp:Content ID="Content1" ContentPlaceHolderID="ContentPlaceHolder1" Runat="Server"><script type="text/javascript">function GetValue(){document.write('<%= TextBox1.ClientID %>')}</script> <asp:TextBox ID="TextBox1" runat="server"></asp:TextBox> <input type="button" runat="server" id="button1" onclick="GetValue();" value="賦值" /></asp:Content>頁面顯示了ctl00_ContentPlaceHolder1_TextBox1。即TextBox1.ClientID =ctl00_ContentPlaceHolder1_TextBox1。
此時把代碼改成
<%@ Page Language="C#" MasterPageFile="~/MasterPage.master" AutoEventWireup="true" CodeFile="Default3.aspx.cs" Inherits="Default3" Title="Untitled Page" %><asp:Content ID="Content1" ContentPlaceHolderID="ContentPlaceHolder1" Runat="Server"><script type="text/javascript">function GetValue(){var t=document.getElementById("TextBox1");t.innerText=2;}</script> <asp:TextBox ID="TextBox1" runat="server"></asp:TextBox> <input type="button" runat="server" id="button1" onclick="GetValue();" value="賦值" /></asp:Content>出錯了,t=null,也就是找不到TextBox1,所以需要改成var t=document.getElementById('<%=TextBox1.ClientID%>');
3、綜述
對於伺服器控制項,在用戶端調時使用ClientID屬性,在服務端時使用ID屬性。