.net 4.0 控制服务器控件客户端 ID
客户端 ID:开发人员现在可以管理会对所呈现客户端 ID 造成影响的控件 ID。Control 类现在提供了一个新的 ClientIDMode 属性,可用于在确定是否需要在呈现时重构客户端 ID 时,指定运行时的行为。这将删除客户端 ID 中以前的无用信息。
修改客户端 ID 属性可以确保各元素都被唯一标识。但是,对于需要执行客户端脚本任务的开发人员来说,这会带来非常大的麻烦。如果您使用过 ASP.NET,那么肯定遇到过这种问题。问题在于,您在运行时之前不知道客户端 ID 究竟是什么,因此难以执行任何客户端脚本任务。此外,修改页面、添加删除控件都会导致生成不同的客户端 ID。
如果您使用过 ASP.NET,则应该知道解决此方法的技巧。每个控件都有一个只读的 ClientID 属性,用于提供唯一的客户端 ID。您可以在动态添加脚本时使用它,或者更加常见的用法是,使用内联代码(早期的 ASP 样式)将该值提供给客户端脚本。
JavaScript
<script type="text/javascript">
function DoSomething(){
alert('<%= Control.ClientID %>');
}
</script>
为了解决这种问题,ASP.NET 4.0 提供了四种 ClientID“模式”,可满足用户从已有行为到全面控制的一切需求。需依照 ClientIDMode 模式来修改控件 ID 属性,然后使用它作为客户端 ID。
这四种模式分别是:
• 旧式:如果控件层次结构未设定 ClientIDMode,则默认使用此模式。这会造成客户端 ID 表现 2.0 版本框架中的行为(3.0 和 3.5 未修改此代码路径)。这种模式将生成一个类似于 "ctl00_MasterPageBody_ctl01_Textbox1" 的 ID。
• 继承:这是所有控件的默认行为。这需要获取父控件中的 ClientIDMode 值。您不需要为每个控件都设置此模式,因为它是默认的。仅当 ClientIDMode 被修改并且新的期望行为是继承父控件时,需要使用它。
• 静态:此模式的行为与其名称所表达的含义完全一样;它将客户端 ID 设置为静态。这表示您对此 ID 的设置将反映到客户端 ID 上。请注意,这意味着如果在重复控件中使用了静态 ClientIDMode,则开发人员需要负责确保客户端 ID 的唯一性。
• 可预测:在需要以可预测的方式确保框架的唯一性时将使用此模式。这种模式最常应用于数据绑定控件。框架会遍历控件层次结构,为提供的 ID 添加其父控件 ID 作为前缀,直到它到达层次结构中 ClientIDMode 为静态的控件。当控件位于数据绑定控件中时,会在所提供的 ID 中添加一个标识该实例的值作为后缀。ClientIDRowSuffix 属性用于控制将用作后缀的值。此模式将生成一个类似于 "Gridview1_Label1_0" 的 ID。
FROM MSDN