我正在尝试理解以下select
元素:
<select name="ctl00$ctl00$ContentPlaceHolder1$ContentItems$ddlResponseRange id="ctl00_ctl00_ContentPlaceHolder1_ContentItems_ddlResponseRange" class="Content" style="width:11%;">
这是所有自动生成的代码,正确(即像ct100)? $符号在做什么 - 它们是用于表达式绑定吗?仅供参考,这里的ddl表示“下拉列表”。
答案 0 :(得分:1)
这只是一个大字符串。从HTML的角度来看,他们所有有效的字符都构成了属性的价值,因此从这个意义上来说,它是正确的&#34;。
至于尝试自己使用id / name值,或者依赖于基于该结构的名称/ id的假设,我建议避免这种情况。我发现最好假装ASP会生成一个我无法使用的随机名称/ ID,尽管实际上它只是从该项目到根目录的所有元素的ID。如果你发现自己写出了这样的ID值,你可能会做错事。
至于为什么它遵循惯例而不是仅实际分配随机ID /名称(或根本没有),以便它可以重新使用它来将HTML响应与内存中项目的结构相关联。确保每页的ID是唯一的也很重要,通过使用这种结构,这意味着APS ID值只需要在兄弟元素中是唯一的。
答案 1 :(得分:1)
$
和_
用作控件的服务器端ID ddlResponseRange
与其<asp:content>
类型的父控件的服务器端ID之间的分隔符。 3}}(通常是<form runat="server">
个控件)。
在INamingContainer
内的页面上的控件本身没有这样的属性。但是当您开始使用母版页或数据绑定控件时,您正在使用实现{{1}}的控件。此接口类似于标记,它指示ASP.NET运行时开始将控件的服务器端ID添加到其子控件的ID。这对于保证生成的HTML中的唯一名称和ID属性是必要的。
最终,此基础结构支持ASP.NET Web Forms回发机制和客户端脚本。
如果您使用的是ASP.NET 4.0或更高版本,则实际上可以影响ASP.NET生成客户端ID的方式。有关配置客户端ID的不同方法,请参阅INamingContainer
。