【发布时间】:2010-12-09 09:08:09
【问题描述】:
我知道 ClientID 用于 javascript,UniqueId 用于服务器端,并且在 asp.net 2.0 中 ClientID 使用下划线 (_) 而 UniqueId 使用美元符号 ($)。但我不明白为什么要使用两个不同的 id。为什么不能只使用或使用下划线或在两者中使用美元符号:服务器端和客户端。有人可以解释一下吗?
【问题讨论】:
标签: asp.net clientid unique-id
我知道 ClientID 用于 javascript,UniqueId 用于服务器端,并且在 asp.net 2.0 中 ClientID 使用下划线 (_) 而 UniqueId 使用美元符号 ($)。但我不明白为什么要使用两个不同的 id。为什么不能只使用或使用下划线或在两者中使用美元符号:服务器端和客户端。有人可以解释一下吗?
【问题讨论】:
标签: asp.net clientid unique-id
(除了我上面的原始答案)
好吧,您可能知道 UniqueID 与 name 属性一起使用,ClientId 与呈现的 HTML 标记的 id 属性一起使用。 UniqueID 使用冒号作为分隔符。另一方面,ClientId 使用下划线作为分隔符,因为 JavaScript 变量名中不允许使用冒号。 ClientID 在页面上确实和 UniqueID 一样是唯一的,但 ClientID 是针对客户端处理的,而 UniqueID 是针对服务器端的(很明显),后者尤其是用于路由回发数据和具有复合控件的事件
但是我认为一些原因可能是在普通控件 ID 中使用下划线作为分隔符是非常常见的行为,因此下划线不能在 UniqueID 中用作控件分隔符(如果我们从理论上考虑使用一个属性进行管理),因为您可以不要区分控件。另一方面,出于同样的原因,您不能在控件 ID 中使用冒号,页面框架不允许这样做,因此它确保冒号无法到达 ClientID(这是因为 JavaScript 不喜欢它) .
由于这些原因,冒号在 UniqueID 中使用是一个不错的选择,因为 FindControl 方法可以使用它来导航控件树并定位控件(它可以轻松拆分 UniqueID)。
【讨论】:
this.UniqueID 是附加了所有命名容器的控件名称, 将其视为完全限定的控件名称。 this.ClientID 是值 会出现在控件的id属性中,它是一个翻译 uniqueid 是(几乎)符合 html 的 id 标签(前导 下划线并不是真正的 html 兼容)。
【讨论】: