22

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

4

2 回答 2

12

(除了我上面的原始答案)

好吧,您可能知道 UniqueID 与 name 属性一起使用,ClientId 与呈现的 HTML 标记的 id 属性一起使用。UniqueID 使用冒号作为分隔符。另一方面,ClientId 使用下划线作为分隔符,因为 JavaScript 变量名中不允许使用冒号。ClientID 在页面上确实也像 UniqueID 一样是唯一的,但是 ClientID 是针对客户端处理的,而 UniqueID 是针对服务器端的(很明显),后者尤其是用于路由回发数据和具有复合控件的事件

但是我认为一些原因可能是在普通控件 ID 中使用下划线作为分隔符是很常见的行为,因此下划线不能在 UniqueID 中用作控件分隔符(如果我们理论上认为使用一个属性进行管理),因为你不能控件之间的区别。另一方面,出于同样的原因,您不能在控件 ID 中使用冒号,页面框架不允许这样做,因此它确保冒号无法到达 ClientID(这是因为 JavaScript 不喜欢它) .

由于这些原因,在 UniqueID 中使用冒号是一个不错的选择,因为 FindControl 方法可以使用它来导航控件树并定位控件(它可以轻松拆分 UniqueID)。

于 2009-10-23T09:40:00.790 回答
6

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

于 2009-10-23T08:20:16.097 回答