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