在呈现 ASP.NET 服务器控件时,该控件的 ClientID 属性 (property) 作为结果元素的 id 属性 (attribute) 和 name 属性 (attribute) 呈现于页面
上。(ClientID 属性是从您所设置的 ID 属性中自动生成的。)
例如,您可能会创建以下 ASP.NET 服务器控件:<asp:textbox id="TextBox1" runat="server" text="Sample Text" />
ClientID 属性被设置为 TextBox1,在基于 HTML 的浏览器中,其结果元素与以下所示类似:
<input name="TextBox1" type="text" value="Sample Text" id="TextBox1" />
注意
form 元素只呈现 ID 属性,而不呈现 name 属性。
因此,可以使用这些属性在客户端脚本中引用服务器控件。通常,必须在客户端脚本中用完全限定引用来引用控件;
如果控件是页面中 form 元素的子控件,则一般使用下面的代码示例所示的语法在客户端脚本中引用控件。
document.forms[0].TextBox1.value = "New value";
第二个示例假定页面上的 form 元素已将其自身的 id 属性设置为 form1。
引用服务器控件所需的确切语法取决于您所使用的控件,以及其是否为另一控件的子控件。如果不确定如何引用控件,
则请运行页面,查看其源文件,然后 确定该控件的呈现方式,这可能会有所帮助。
引用在其他控件内部呈现的控件有些控件将子控件呈现在页面中。这些控件中包括数据列表控件(如 GridView、DetailsView、FormView、DataList 和 Repeater 控件)、用户控件和 Web 部件控件。
在这些情况下,子控件可能不具有唯一的 ID,这可能是因为子控件是在某个模板中定义的,该模板会为每个数据行(数据列表控件)生成新的控件实例,也可能是因为可以从外部源(用户控件和 Web 部件控件)将父控件添加到页面中。因此,这些父控件是命名容器(即它们实现 INamingContainer)。命名容器可保证其子控件在页面上拥有唯一的 ID。
例如,您可能在 DataList 控件中创建了一个 ItemTemplate 属性,并添加了一个 ID 被设置为 checkEnabled 的 CheckBox 控件。这样,在呈现 DataList 控件时,就会为每个数据项呈现一个新的 checkEnabled 控件。呈现的页面中不能包含名为 checkEnabled 的元素的多个实例,这样 DataList 控件就可以为其每个子控件创建唯一的标识。
命名容器子控件的唯一标识通过呈现两个属性的方式来生成。对于每个子控件:
控件的 UniqueID 属性 (property) 被呈现为 name 属性 (attribute)。
控件的 ClientID 属性 (property) 被呈现为 id 属性 (attribute)。
ClientID 和 UniqueID 属性都基于原始的 ID 属性,并用足够的信息进行了修改,以保证页面中结果的唯一性。ClientID(也就是所呈现元素中的 id 属性)的值可在客户端脚本中引用。
如果在浏览器中显示一个具有命名容器的页面,则可以查看该页面的源文件,从中找到唯一的 ID,这些 ID 作为命名容器子控件的 name 属性和 id 属性生成。但是,建议不要依赖于直接引用在浏览器中看到的 ID。因为用于生成子控件唯一 ID 的公式可能会发生变化。因此,应当获取子控件的 ClientID 属性值,并用该值来引用该子控件。例如,您可能会在页面中动态创建客户端脚本。如果客户端脚本引用一个子控件,则应获取该子控件的 ClientID 属性,并将其嵌入到动态脚本中。