ASP.NET控件的ID,ClientID,UniqueId的区别

     在正常情况下,某个asp.net服务器控件的这三个属性值是一致的,但是在某些情况下会不一样的。例如: 

           有时,不能为控件分配唯一的名称。例如,如果 Repeater 控件在它的某个模板中包含一个 Label 控件,则为 Repeater 控件中的各个项呈现该 Label 控件的一个实例。在呈现控件的多个实例时,为防止出现命名冲突,ASP.NET 为页上的各个服务器控件自动生成一个唯一的 ClientID 值。ClientID 值是通过连接控件的 ID 值和它的父控件的 UniqueID 值生成的。如果未指定控件的 ID 值,则使用自动生成的值。生成的 ID 的各个部分以下划线字符 (_) 分隔。

          UniqueID 此属性对于区分包含在其他重复的数据绑定服务器控件中的服务器控件尤其重要。重复控件包括 RepeaterDataListDataGridWeb 服务器控件(或任何在数据绑定时创建的包含重复功能的自定义服务器控件),它们充当其子控件的命名容器。这意味着它为其子控件创建唯一的命名空间,以使它们的 ID 属性值不冲突。

          例如,如果将 ASP.NETLabelWeb 服务器控件包含在 Repeater 服务器控件中,并给 Label 控件赋以 MyLabelID 属性值,给 Repeater 赋以 MyRepeaterID 属性值。如果将 Repeater 数据绑定到具有三个项的 ArrayList 对象, Label 服务器控件的每个实例所产生的 UniqueID 属性是 MyRepeater$ctl0MyRepeater$Ctl1MyRepeater$Ctl2。(分隔符字符。默认为“$”。 )

           而UniqueID能实现这个是因为Repeater 这一类能包含子控件的服务器控件继承了一个接口INamingContainer 。实现该接口的控件都创建一个新的命名空间,在这个新的命名空间中,所有子控件 ID 属性在整个应用程序内保证是唯一的。

posted @ 2011-01-09 18:39  雁北飞  阅读(312)  评论(0编辑  收藏  举报