首页 / 网页编程 / ASP.NET / 漫话ID(中)——UniqueID和ClientID
        
            漫话ID(中)——UniqueID和ClientID2011-10-14 博客园 Aaron Wu在上一篇漫话ID(上)——Name和ID的种种中,我介绍了关于name和id的一些问题,在这片文章中, 我们把目光放到ID上来,这篇主要关注自定义控件和repeater等控件中碰到的UniqueID和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 属 性为冒号字符 (:)。例如,创建以下 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 部件控件。例1:在页面中加入一个DataGrid控件,然后在该控件中加入Button子控件。前台代码:<asp:DataGrid ID="DataGrid1" runat="server" AutoGenerateColumns="false">后台代码:protected void Page_Load(object sender, EventArgs e)
    {
        if (!Page.IsPostBack)
        {
            ArrayList list = new ArrayList();
            list.Add(1);
            list.Add(2);
            DataGrid1.DataSource = list;
            DataGrid1.DataBind();
        }
}