【问题标题】:HTML classes and IDs with with $ or non alpha numeric characters带有 $ 或非字母数字字符的 HTML 类和 ID
【发布时间】:2011-01-03 17:00:15
【问题描述】:

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

例如:

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

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

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

【问题讨论】:

  • 去看看,MS 会超过标准。

标签: asp.net xhtml w3c-validation


【解决方案1】:

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

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

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

这里,母版页 (ctl00) 和 ContentPlaceHolder (MainContent) 控件是命名容器。 Age TextBox Web 控件将具有其命名容器祖先的clt00_MainContent_Age - namely, its own server-sideIDproperty value prefixed with theID`值呈现的id

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

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

【讨论】:

  • 我不确定他们使用的是哪个版本的 ASP.NET。根据您对如何制定 id 的解释,我认为 ASP.NET 开发人员在生成前端代码时犯了一个错误。
【解决方案2】:

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

【讨论】:

    【解决方案3】:

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

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2011-12-20
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多