在早期的ASP.NET框架中,如果你放置一个控件在一个容器中,如GridView模板列、登录模板、其它,在运行时这些控件的ID将被替换由ASP.NET自身产生的随机唯一ID。
为开发者提供服务方访问控件的Page.FindControl("controlid")以及JavaScript中使用 的document.getElementById("controlid"),这是一个由来已久的问题。简单来说运行时生成的控件ID并不是可预见的。
但.NET开发者不久将会没有这样的困扰,但是。因为在ASP.NET 4.0中所有控件有一个属性ClientIDMode。这提供了良好的控制生成的ID的内容控制在运行时。
对ClientIDModes可用的类型有:
- 自动识别(AutoID) -这是相同的随机方式,因为它发生在使用ASP.NET的早期版本。
- 静态(Static) -控件的ID将不会改变在运行时。这是非常方便的设置如果被控制在网页上使用的容器或需要在客户端脚本访问。
- 可预测的(Predictable) 模式-静态模板像一个TextBox控件在GridView不会有用,因为GridView的行的重复。在这种情况下可预测的模式值是在方便的地方,开发者可以提供一个可预测ClientIDRowSuffix属性的主键的GridViewRow使用。可以预见,这将追加后缀,以独特的价值作为实际控制的ID。例如,如果实际控制TemplateColumn控件ID在是txtBox和ClientIDRowSuffix是GridViewRowIndex文本框的ID识别码,然后在运行时产生的row1将GridView1_txtBox_1上,为row2将GridView1_txtBox_2等。
- 继承(Inherit ) -这将继承父控件ClientIDMode值的。
- 在指定的页面级别上,你不必为每个控件提供ClientIDMode。
<%@ Master Language="C#" ClientIDMode="Predictable" AutoEventWireup="true" CodeBehind="Site.master.cs" Inherits="MyWebApplication.SiteMaster" %> Or it could also be provided at the application level using the web.config specification as shown below. <system.web> <pages clientIDMode="Predictable"></pages> </system.web>
请注意,ClientIDMode在控制层将覆盖在页面指令和web.config上述设置中指定。