ID是设计的时候所指定的ID。

ClientID是当这个控件生成到客户端页面时候,需要在客户端访问时候用的。

UniqueID是当需要参与服务端回传的时候用的。

备注:当控件是子控件的时候(例如在用户控件中的Button),ClientID在HTML页面中是作为控件的ID属性,UniqueID是作为控件的Name属性,如果不是子控件,那么ClientID和UniqueID是相同的

例如:

MyControl1是一个用户控件,里面包含一个ID为Button1的按钮,把MyControl1放在一个页面中运行,下面是其页面的HTML代码

<input type="submit" name="MyControl1:Button1" value="Button" id="MyControl1_Button1" />

ClientID:MyControl1_Button1 
UniqueID:MyControl1:Button1

补充:当要编写用户控件中一个控件的客户端事件代码时,如果想在用户控件内编写必须要获取该控件的ClientID。

 

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种新增加。 

获取由 ASP.NET 生成的服务器控件标识符。

问题一:用户控件的页面JavaScript中需要使用Asp.net的控件ID,出现不一致。 
问题二:母版页的子页面JavaScript中需要使用Asp.net的控件ID,出现不一致。 
解决办法:
      document.getElementById("<%=TextBox1.ClientID%>").value="1234567"; 

此代码可以在客户端完成对服务器端控件的访问,由于ASP.NET会为把服务器端控件在客户端的呈现生成不同的名称,所以此功能比较有用获取。

注意采用此解决办法的前提: Asp.net的控件为静态控件(通过工具添加的控件)

问题三:动态创建控件的ClientID的获得存在:不能在页面中采用"<%=TextBox1.ClientID%>".方法获得(不能的方法,因为控件是动态创建的);也不能在页面脚本中采用TextBox1.ClientID的方法获得(获得的ID是不正确的)。
解决办法:
(CitySpecProductScheduledControl.ascx.cs代码片段 )
           TextBox text = new TextBox();
            text.MaxLength = 12;
            text.Columns = 12;
            text.Text = DateTime.Now.ToShortDateString();
            text.ID = "dateId";
            text.Attributes.Add("onclick", "calendar()");
            text.Attributes.Add("class", "text");

            HtmlImage dateimg = new HtmlImage();
            dateimg.Src = "../CommonImages/cal.gif";
            string js = string.Format("calendar({0}_{1})",this.ClientID, text.ClientID); //关键代码,按照客户端ClientID的产生规则手工生成。
            dateimg.Attributes.Add("onclick", js);