C#asp.net为什么ClientID和UniqueID之间存在差异?

Mar*_*ijn 22 asp.net clientid unique-id

我知道ClientID用于服务器端的javascript和UniqueId,ClientID使用下划线(_),而UniqueId在asp.net 2.0中使用美元符号($).但我没有得到的是为什么使用两个不同的id.为什么不能只使用或使用下划线或在服务器端和客户端使用美元符号.有人可以解释一下吗?

Jam*_*esM 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).


Jam*_*esM 6

this.UniqueID是附加所有命名容器的控件名称,将其视为完全限定的控件名称.this.ClientID是将出现在控件的id属性中的值,它是uniqueid的转换,是一个(几乎)符合html的id标记(前导下划线不是真正符合html).