說到ASP.NET最常用的方法,FindControl一定有被提名
平常在用沒什麼就這樣就OK
TextBox tb = this.Page.FindControl("TextBox1") as TextBox;
之後想幹嘛就幹嘛
但是如果有套用主版頁面的話這方法就失靈囉,總是見到怒毆大神,然後就怒毆電腦
正解如下
TextBox tb = this.Master.FindControl("ContentPlaceHolder1").FindControl("TextBox1") as TextBox;
先用 this.Master 選到主版,在慢慢向下一層層找
對,這方法很邪門不像 WinFrom 的 Control.ControlCollection.Find 方法,有第二個參數
對於有套主版或者像是 GridView ItemTemplate 裡面的都無法找到
假如有2個都叫TextBox1的鬼東西
一般得這麼做才能對他操作

如果還有用巢狀主版的話,好不好玩?
佐藤ポヨ表示:自己寫個 擴充方法 吧

在類別庫建立個靜態類別寫擴充方法
擴充方法細則參閱MSDN

把類別加入參考後,Control 就能用 doFindControl 跟 doFindControls 擴充方法

使用方式

好啦,地獄兩百層的控制項也能Find了
沒有留言:
張貼留言