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

时间:2011-01-03 17:00:15

标签: asp.net xhtml w3c-validation

我正在查看XHTML doctype上的一些站点代码,从我看到的框架是ASP.net。 HTML中的ID在那里有一个“$”。

例如:

<img id="$ct100templateContent$SectionPanel1$ctl01$ctl02ctl00_templateContent_SectionPanel1_ctl01_ct999img" src="this.jpg"/>

从W3C语义的角度来看,“$”在ID或类中无效。 ID和类只能包含XHTML doctype中的字母数字字符。

“$”是一个引用Web控件或模板项的ASP.net命名约定吗?

3 个答案:

答案 0 :(得分:1)

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

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

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

Sample ASP.NET control hierarchy.

此处,母版页(ctl00)和ContentPlaceHolder(MainContent)控件是命名容器。 Age TextBox Web控件将为其命名容器祖先提供id clt00_MainContent_Age - namely, its own server-side个ID property value prefixed with the ID`值。

但请注意呈现的id如何将每个命名容器点与下划线分开。这是ASP.NET中的默认功能,所以我很困惑为什么你看到了id属性中的美元符号。 (在制定name属性时,ASP.NET会使用美元符号分隔每个命名容器点,但在制定id属性值时不应使用$。)

您使用的是哪个版本的ASP.NET?你在做什么......很奇怪?就像使用自定义控件并覆盖基类Control类的IdSeparator属性一样?如果您使用的是ASP.NET 4,是否设置(有意或无意)控件的ClientIDMode属性?

答案 1 :(得分:0)

$ value代表控件嵌入您网站/页面的级别。您还可以将ClientIDMode更改为Static以使用您自己的ID。

答案 2 :(得分:0)

是的,ASP.NET在根据分层页面布局生成控件的ID时使用'$'符号。 ASP.NET不在类名中使用'$'符号。