0

我试图理解以下select元素:

   <select name="ctl00$ctl00$ContentPlaceHolder1$ContentItems$ddlResponseRange id="ctl00_ctl00_ContentPlaceHolder1_ContentItems_ddlResponseRange" class="Content" style="width:11%;">

这都是自动生成的代码,正确(即像 ct100 )?$ 符号在做什么 - 它们用于表达式绑定吗?仅供参考,这里的 ddl 表示“下拉列表”。

4

2 回答 2

1

这只是一根大绳子。从 HTML 的角度来看,它们都是构成属性值的有效字符,因此在这个意义上它是“正确的”。

至于尝试自己使用 id/name 值,或者依赖基于该结构的 name/id 假设,我建议避免这种情况。我发现最好假装 ASP 会生成一个我无法使用的随机名称/ID,尽管事实上它只是从该项目到根的所有元素的 ID。如果你发现自己写出这样的 ID 值,你可能做错了什么。

至于为什么它遵循该约定而不是仅仅实际分配一个随机 ID/名称(或根本没有),以便它可以重新使用它来将 HTML 响应与内存中项目的结构相关联。确保每个页面的 ID 是唯一的也很重要,并且通过使用这种结构意味着 APS ID 值只需要在兄弟元素之间是唯一的。

于 2012-12-17T20:12:41.957 回答
1

$_用作控件ddlResponseRange的服务器端 ID 和其父控件类型INamingContainer(通常是<asp:content>控件)的服务器端 ID 之间的分隔符。

页面上的控件本身,就在 a 内部<form runat="server">没有这样的属性。但是,当您开始使用母版页或数据绑定控件时,您使用的是实现INamingContainer. 这个接口就像一个标记,它指示 ASP.NET 运行时开始将控件的服务器端 ID 添加到其子控件的 ID。这对于保证生成的 HTML 中的唯一名称和 ID 属性是必要的。

最终,此基础结构支持 ASP.NET Web 窗体回发机制和客户端脚本。

如果您使用的是 ASP.NET 4.0 或更高版本,您实际上可以影响 ASP.NET 生成客户端 ID 的方式。有关配置客户端 ID 的不同方法,请参阅本文。

于 2012-12-17T20:40:07.747 回答