带有 $ 或非字母数字字符的 HTML 类和 ID

发布于 2024-10-10 10:59:45 字数 349 浏览 1 评论 0原文

我正在查看 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 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。

评论(3

浮华 2024-10-17 10:59:45

我有点困惑你如何/为什么在 id 中看到美元符号。

将 Web 控件呈现为标记时,ASP.NET 根据 Web 控件的 ID 属性及其在中的位置生成元素的 idname 属性。控制层次结构。简而言之,某些控件(例如模板化控件或重复控件)充当命名容器。在确定 idname 时,此类控件的 ID 属性值将作为其内部控件的 ID 属性值的前缀属性。

例如,请考虑以下控件层次结构:

Sample ASP.NET control hierarchy.

这里,母版页 (ctl00) 和 ContentPlaceHolder (MainContent) 控件是命名容器。 Age TextBox Web 控件将具有 clt00_MainContent_Age 的渲染 id - 即它自己的服务器端ID属性值,前缀为其命名容器祖先的 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 and name attributes based on the Web control's ID 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 the id and name attributes.

For example, consider the following control hierarchy:

Sample ASP.NET control hierarchy.

Here, the Master Page (ctl00) and ContentPlaceHolder (MainContent) controls are naming containers. The Age TextBox Web control will have a rendered id of clt00_MainContent_Age - namely, its own server-sideIDproperty value prefixed with theID` 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 the id attribute. (When formulating the name attribute, ASP.NET separates each naming container spot with a dollar sign, but it shouldn't use $ when formulating the id 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's IdSeparator property? If you are using ASP.NET 4, are you setting (either intentionally or unintentionally) the control's ClientIDMode property?

琴流音 2024-10-17 10:59:45

$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.

红墙和绿瓦 2024-10-17 10:59:45

是的,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.

~没有更多了~
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文