带有 $ 或非字母数字字符的 HTML 类和 ID
我正在查看 XHTML 文档类型上的一些站点代码,从我所看到的框架是 ASP.net。 HTML 中的 ID 中有一个“$”。
例如:
<img id="$ct100templateContent$SectionPanel1$ctl01$ctl02ctl00_templateContent_SectionPanel1_ctl01_ct999img" src="this.jpg"/>
从 W3C 语义的角度来看,“$”在 ID 或类中无效。 ID 和类只能在 XHTML 文档类型中包含字母数字字符。
“$”是引用 Web 控件或模板项的 ASP.net 命名约定吗?
I'm looking at some site code on an XHTML doctype and from what I'm seeing the framework is ASP.net. The IDs in the HTML has a "$" in there.
For example:
<img id="$ct100templateContent$SectionPanel1$ctl01$ctl02ctl00_templateContent_SectionPanel1_ctl01_ct999img" src="this.jpg"/>
From a W3C semantic point of view the "$" is not valid in an ID or Class. IDs and classes can only contain alpha numeric characters in an XHTML doctype.
Is the the "$" a ASP.net naming convention referencing a web control or template item?
如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。
绑定邮箱获取回复消息
由于您还没有绑定你的真实邮箱,如果其他用户或者作者回复了您的评论,将不能在第一时间通知您!
发布评论
评论(3)
我有点困惑你如何/为什么在 id 中看到美元符号。
将 Web 控件呈现为标记时,ASP.NET 根据 Web 控件的
ID
属性及其在中的位置生成元素的id
和name
属性。控制层次结构。简而言之,某些控件(例如模板化控件或重复控件)充当命名容器。在确定id
和name
时,此类控件的ID
属性值将作为其内部控件的ID
属性值的前缀属性。例如,请考虑以下控件层次结构:
这里,母版页 (
ctl00
) 和 ContentPlaceHolder (MainContent
) 控件是命名容器。Age
TextBox Web 控件将具有clt00_MainContent_Age 的渲染
IDid
- 即它自己的服务器端属性值,前缀为其命名容器祖先的 ID` 值。
但请注意呈现的 id 如何用下划线分隔每个命名容器点。这是 ASP.NET 中的默认功能,所以我很困惑为什么您会看到
id
属性中的美元符号。 在制定name
属性时,ASP.NET 使用美元符号分隔每个命名容器点,但在制定id
属性值时不应使用 $。)( 您使用的 ASP.NET 版本是多少?你在做什么……奇怪的事吗?喜欢使用自定义控件并覆盖基
Control
类的IdSeparator
属性吗?如果您使用的是 ASP.NET 4,您是否(有意或无意)设置了控件的ClientIDMode
属性?I'm a little confused how/why you're seeing dollar signs in the id.
When rendering a Web control into markup, ASP.NET generates the element's
id
andname
attributes based on the Web control'sID
property and its location in the control hierarchy. In short, certain controls - such as templated controls or repeating controls - act as naming containers. Such controls'ID
property values are prefixed to their inner controls'ID
property values when determining theid
andname
attributes.For example, consider the following control hierarchy:
Here, the Master Page (
ctl00
) and ContentPlaceHolder (MainContent
) controls are naming containers. TheAge
TextBox Web control will have a renderedid
ofclt00_MainContent_Age - namely, its own server-side
IDproperty value prefixed with the
ID` values of its naming container ancestors.But note how the rendered
id
is separating each naming container spot with an underscore. This is the default functionality in ASP.NET, so I am perplexed as to why you are seeing dollar signs in theid
attribute. (When formulating thename
attribute, ASP.NET separates each naming container spot with a dollar sign, but it shouldn't use $ when formulating theid
attribute value.)What version of ASP.NET are you using? Are you doing anything... weird? Like using custom controls and overriding the base
Control
class'sIdSeparator
property? If you are using ASP.NET 4, are you setting (either intentionally or unintentionally) the control'sClientIDMode
property?$value 代表控件嵌入到您的站点/页面中的级别。您还可以将 ClientIDMode 更改为 Static 以使用您自己的 ID。
The $value stands for the level of which the control is embedded in your site/page. You can also change ClientIDMode to Static to make use of your own ID's.
是的,ASP.NET 在根据分层页面布局生成控件 ID 时使用“$”符号。 ASP.NET 不在类名中使用“$”符号。
Yes, ASP.NET uses the '$' symbol when it generates the IDs of controls based off the hierarchical page layout. ASP.NET does not use the '$' symbol in class names.