关于控件ID的试验(涉及MasterPage)
地球人都知道asp.net頁面加了MasterPage后會(huì)改變?cè)瓉眄撁婵丶腎D.也隱約知道ID好像是一層一層父子關(guān)系嵌套下來的.但實(shí)際上真是這樣嗎?
今天我們就來試試實(shí)際會(huì)怎么樣: (頁面已經(jīng)加MasterPage)
?
Html1????<div?id="div1"?runat="server">
????????<table?id="table1"?runat="server">
????????????<tr?id="tr1"?runat="server">
????????????????<td?id="td1"?runat="server">
????????????????????<asp:Label?ID="lbl1"?runat="server"?Text="aa"></asp:Label></td>
????????????????<td?id="td2">
????????????????????<asp:Label?ID="lbl2"?runat="server"?Text="bb"></asp:Label></td>
????????????</tr>
????????</table>
????</div>
?
產(chǎn)生的源代碼如下:
?
Code1????<div>
????????
????<div?id="ctl00_ContentPlaceHolder1_div1">
????????<table?id="ctl00_ContentPlaceHolder1_table1">
????<tr?id="ctl00_ContentPlaceHolder1_tr1">
????????<td?id="ctl00_ContentPlaceHolder1_td1">
????????????????????<span?id="ctl00_ContentPlaceHolder1_lbl1">aa</span></td>
????????<td?id="ctl00_ContentPlaceHolder1_td2">
????????????????????<span?id="ctl00_ContentPlaceHolder1_lbl2">bb</span></td>
????</tr>
</table>
????</div>
????</div>
?
可以看出所有控件都加上了"ctl00_ContentPlaceHolder1_",這個(gè)就是MasterPage的影響了.但是,這個(gè)好像沒有我們印象中的層層包圍哦!
我們?cè)俑囊幌麓a,改成如下:
?
Html2????<div?id="div1"?runat="server">
????????<table?id="table2"?runat="server">
????????????<tr?id="tr2"?runat="server">
????????????????<td?id="td3"?runat="server">
????????????????????<asp:Repeater?ID="rpt1"?runat="server">
????????????????????????<ItemTemplate>
????????????????????????????<asp:Label?ID="lbl3"?runat="server"?Text="aa"></asp:Label>
????????????????????????</ItemTemplate>
????????????????????</asp:Repeater>
????????????????</td>
????????????</tr>
????????</table>
????</div>
?
在Page_load中加入:
?
Code2????????string[]?str?=?new?string[]?{?"aa",?"bb"?};
????????rpt1.DataSource?=?str;
????????rpt1.DataBind();
?
運(yùn)行結(jié)果如下:
?
Code3????<div>
????????
????<div?id="ctl00_ContentPlaceHolder1_div1">
????????<table?id="ctl00_ContentPlaceHolder1_table2">
????<tr?id="ctl00_ContentPlaceHolder1_tr2">
????????<td?id="ctl00_ContentPlaceHolder1_td3">
????????????????????
????????????????????????????<span?id="ctl00_ContentPlaceHolder1_rpt1_ctl00_lbl3">aa</span>
????????????????????????
????????????????????????????<span?id="ctl00_ContentPlaceHolder1_rpt1_ctl01_lbl3">aa</span>
????????????????????????
????????????????</td>
????</tr>
</table>
????</div>
????</div>
?
終于看到我們想要的結(jié)果了! Lable生成的<span> Id有嵌套R(shí)epter的Id了! ("太弱智了吧,這樣也要試??" ~~好像聽到很多噓聲-_-||)
?
既然大家都說太弱智了就不再研究了.總結(jié)一下:
1. 加MasterPage都會(huì)在Id前面加入類似"ctl00_ContentPlaceHolder1_"的前綴.無論多少層,都只加一個(gè).
2.如果頁面中存在重復(fù)控件(重復(fù)控件包括 Repeater、DataList 和 DataGridWeb 服務(wù)器控件(或任何在數(shù)據(jù)綁定時(shí)創(chuàng)建的包含重復(fù)功能的自定義服務(wù)器控件),它們充當(dāng)其子控件的命名容器)的話,重復(fù)控件內(nèi)部的控件Id前綴將加上重復(fù)控件Id一起作為改控件前綴,避免重復(fù).
另外,在后臺(tái)動(dòng)態(tài)添加控件的話,如果你要取ClientID或者UniqueID的話..就要注意了.
?
Code3string?id?=?string.Empty;
Table?ht?=?new?Table();
ht.ID?=?"table1";
TableRow?tr?=?new?TableRow();
tr.ID?=?"row1";
TableCell?tc?=?new?TableCell();
tc.ID?=?"cell1";
id?=?string.Format("<br?/>?Table?Id:{0}?<br?/>?Row?Id:{1}?<br?/>?Cell?Id:{2}",?ht.ClientID,?tr.ClientID,?tc.ClientID);
this.div1.Controls.Add(ht);
ht.Rows.Add(tr);
id??+=?string.Format("<br?/>?Table?Id:{0}?<br?/>?Row?Id:{1}?<br?/>?Cell?Id:{2}",?ht.ClientID,?tr.ClientID,?tc.ClientID);????????
tr.Cells.Add(tc);
this.lbl1.Text?=?id;
?
上邊的代碼,你想想會(huì)出現(xiàn)什么結(jié)果? 先自己想想...
實(shí)際顯示輸出如下:
?
Result1Table?Id:table1?
Row?Id:row1?
Cell?Id:cell1
Table?Id:ctl00_ContentPlaceHolder1_table1?
Row?Id:ctl00_ContentPlaceHolder1_row1?
Cell?Id:cell1??
?
但是頁面HTML源代碼是:
?
Result2????<div>
????????
????<div?id="ctl00_ContentPlaceHolder1_div1">
????????<span?id="ctl00_ContentPlaceHolder1_lbl1"><br?/>?Table?Id:table1?<br?/>?Row?Id:row1?<br?/>?Cell?Id:cell1<br?/><br?/>?Table?Id:ctl00_ContentPlaceHolder1_table1?<br?/>?Row?Id:ctl00_ContentPlaceHolder1_row1?<br?/>?Cell?Id:cell1</span>
????<table?id="ctl00_ContentPlaceHolder1_table1"?border="0">
????<tr?id="ctl00_ContentPlaceHolder1_row1">
????????<td?id="ctl00_ContentPlaceHolder1_cell1"></td>
????</tr>
</table></div>
????</div>
?
可以看出ClientID和UniqueID都必須Add到最終的頁面Control了之后,才能正確取到頁面最終的ID.
這個(gè)試驗(yàn)也很弱智吧-_-||,,,做這個(gè)試驗(yàn)是因?yàn)榻裉旌鸵煌聽?zhēng)論到底控件ID是什么時(shí)候加載前綴的.是在Add之前還是之后..囧..碼完字,閃了~~
轉(zhuǎn)載于:https://www.cnblogs.com/KenBlove/archive/2008/12/25/1362490.html
總結(jié)
以上是生活随笔為你收集整理的关于控件ID的试验(涉及MasterPage)的全部?jī)?nèi)容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 理解Windows中的路由表和默认网关
- 下一篇: 站长必看系列:完全揭密百度和谷歌收录规律