日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當(dāng)前位置: 首頁 > 编程资源 > 编程问答 >内容正文

编程问答

关于控件ID的试验(涉及MasterPage)

發(fā)布時間:2025/4/5 编程问答 30 豆豆
生活随笔 收集整理的這篇文章主要介紹了 关于控件ID的试验(涉及MasterPage) 小編覺得挺不錯的,現(xiàn)在分享給大家,幫大家做個參考.

地球人都知道asp.net頁面加了MasterPage后會改變原來頁面控件的ID.也隱約知道ID好像是一層一層父子關(guān)系嵌套下來的.但實際上真是這樣嗎?

今天我們就來試試實際會怎么樣: (頁面已經(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_",這個就是MasterPage的影響了.但是,這個好像沒有我們印象中的層層包圍哦!

我們再改一下代碼,改成如下:

?

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();

?

運行結(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有嵌套Repter的Id了! ("太弱智了吧,這樣也要試??" ~~好像聽到很多噓聲-_-||)

?

既然大家都說太弱智了就不再研究了.總結(jié)一下:

1. 加MasterPage都會在Id前面加入類似"ctl00_ContentPlaceHolder1_"的前綴.無論多少層,都只加一個.

2.如果頁面中存在重復(fù)控件(重復(fù)控件包括 Repeater、DataList 和 DataGridWeb 服務(wù)器控件(或任何在數(shù)據(jù)綁定時創(chuàng)建的包含重復(fù)功能的自定義服務(wù)器控件),它們充當(dāng)其子控件的命名容器)的話,重復(fù)控件內(nèi)部的控件Id前綴將加上重復(fù)控件Id一起作為改控件前綴,避免重復(fù).

另外,在后臺動態(tài)添加控件的話,如果你要取ClientID或者UniqueID的話..就要注意了.

?

Code3
string?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;

?

上邊的代碼,你想想會出現(xiàn)什么結(jié)果? 先自己想想...

實際顯示輸出如下:

?

Result1
Table?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.

這個試驗也很弱智吧-_-||,,,做這個試驗是因為今天和一同事爭論到底控件ID是什么時候加載前綴的.是在Add之前還是之后..囧..碼完字,閃了~~

轉(zhuǎn)載于:https://www.cnblogs.com/KenBlove/archive/2008/12/25/1362490.html

總結(jié)

以上是生活随笔為你收集整理的关于控件ID的试验(涉及MasterPage)的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網(wǎng)站內(nèi)容還不錯,歡迎將生活随笔推薦給好友。