我知道ClientID用于服务器端的javascript和UniqueId,而ClientID使用下划线(_),而UniqueId在asp.net 2.0中使用美元符号($)。但我没有得到的是为什么使用两个不同的id。为什么不能只使用或使用下划线或在服务器端和客户端使用美元符号。有人可以解释一下吗?
答案 0 :(得分:12)
(除了我上面的原始答案)
好吧,您可能知道UniqueID与name属性一起使用,ClientId与呈现HTML标记的id属性一起使用。 UniqueID使用冒号作为分隔符。另一方面,ClientId使用下划线作为分隔符,因为JavaScript变量名称中不允许使用冒号。 ClientID在Page上确实也是唯一的,因为UniqueID是,但ClientID的目标是客户端处理,而UniqueID用于服务器端(非常明显),后者特别用于路由回发数据和具有复合控件的事件
但是我认为一些推理可能是在正常控件ID中使用下划线作为分隔符是非常常见的行为,因此下划线不能在UniqueID中用作控件分隔符(如果我们理论上认为使用一个属性进行管理),因为你不能不区分对照。另一方面,出于同样的原因,你不能在Control ID中使用冒号,Page Framework不允许它,这样它确保冒号无法访问ClientID(这是因为JavaScript不喜欢它)
由于这些原因,冒号是在UniqueID中使用的相当不错的选择,因为FindControl方法可以使用它来导航控制树和定位控件(它可以轻松地拆分UniqueID)。
答案 1 :(得分:6)
this.UniqueID是附加所有命名容器的控件名称, 将其视为完全限定的控件名称。 this.ClientID是值 那将出现在控件的id属性中,它是一个翻译 uniqueid是一个(几乎)符合html标准的id标签(领先 下划线不符合html标准。)