我试图了解“名称”属性如何适用于通过 ASP.NET 呈现的标记中的元素
IE<select id="lblxyz" name="ctl00$c$ctl341$lblxyz">
ctl00
和是什么 c
?ctl1341
如果我创建 a WebControl
,给它一个任意 id,然后将 aButton
放在它的Controls
集合中,该name
属性似乎不反映容器的 id?
我试图了解“名称”属性如何适用于通过 ASP.NET 呈现的标记中的元素
IE<select id="lblxyz" name="ctl00$c$ctl341$lblxyz">
ctl00
和是什么 c
?ctl1341
如果我创建 a WebControl
,给它一个任意 id,然后将 aButton
放在它的Controls
集合中,该name
属性似乎不反映容器的 id?
您发现的关键是并非所有控件都会触发此行为。关键是INamingContainer接口。如您所见,只有命名容器将有助于控件的名称,其他控件不会。
上面链接的 MSDN 页面很好地说明了这一点:该接口“标识了一个容器控件,该控件在 Page 对象的控件层次结构中创建了一个新的 ID 命名空间。”
您可能对此感兴趣,它概述了生成的 id/名称:http ://www.mostlylucid.net/archive/2008/11/03/way-too-much-information-on-control-ids-和-asp.net-4.0.aspx
生成的名称属性通常始终以 开头ctl00
,其余的根据控件在控件层次结构中的位置生成。任何实现该接口的父控件INamingContainer
都将有助于为任何子控件生成的名称。
您可以使用新的 ClientIDMode 控制客户端 ID 的显示方式: