我试图了解'name'属性如何为通过ASP.NET呈现的标记中的元素起作用在ASP.NET中如何计算'name'属性?
I.e. <select id="lblxyz" name="ctl00$c$ctl341$lblxyz">
什么是ctl00
,c
和ctl1341
?
如果我创建一个WebControl
,给它一个任意的ID,然后将一个Button
其Controls
集里面,name
属性似乎并没有反映容器的id?
我试图了解'name'属性如何为通过ASP.NET呈现的标记中的元素起作用在ASP.NET中如何计算'name'属性?
I.e. <select id="lblxyz" name="ctl00$c$ctl341$lblxyz">
什么是ctl00
,c
和ctl1341
?
如果我创建一个WebControl
,给它一个任意的ID,然后将一个Button
其Controls
集里面,name
属性似乎并没有反映容器的id?
您发现的关键是并非所有控件都会触发此行为。关键是INamingContainer接口。只有命名容器将会为您所看到的控件名称做出贡献,其他控件则不会。
上面链接的MSDN页面说得非常好:该接口“标识一个容器控件,它在Page对象的控件层次结构内创建一个新的ID名称空间。”
您可以控制客户端ID出现使用新的ClientIDMode:
所产生的名字一般属性总是使用ctl00
,剩下的就是基于控制生活中的控制,其中产生层次结构。任何实现接口的父控件都将为为任何子控件生成的名称作出贡献。