我試圖瞭解'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
,剩下的就是基於控制生活中的控制,其中產生層次結構。任何實現接口的父控件都將爲爲任何子控件生成的名稱作出貢獻。