2012-03-01 60 views
0

發現文本框我有一個頁面上的文本框,但是當我使用無法在頁面

TextBox formTextBox = Page.FindControl(textBox) as TextBox; 

它回來null。有沒有解決的辦法?我知道控件在頁面上,但我無法找到它。

感謝

+1

什麼'textBox':

<asp:PlaceHolder ID="MyPlaceHolder" runat="server> <asp:TextBox ID="MyTextBox" runat="server" /> </asp:PlaceHolder> 

然後你就可以用鰭文本框? – SLaks 2012-03-01 16:17:39

+1

你知道控件在頁面上,但是**哪裏**?你能收到你的標記嗎?除此之外,你在使用'MasterPages'嗎?如果這是真的,請查看我對另一個問題的回答:http://stackoverflow.com/a/8163964/284240 – 2012-03-01 16:18:12

+0

它是否位於母版頁的內容區域中? – Zachary 2012-03-01 16:20:09

回答

4

如果您使用MasterPages發現,這控件位於ContentPlaceholder的頁面中,因爲該頁面的ControlCollection中唯一的控件是MasterPage本身,所以無法直接通過FindControl獲得對控件的引用。 這很有道理。當控件位於使用MasterPage的頁面的頂層時,您無法保證該ID是唯一的,因爲其他ContentPages也可能擁有此ID的控件,並且現在可以返回另一個控件,而不是明天。

如果你看看你想找到的控制的NamingContainer,你會發現如果是MasterPage這是ContentPlaceHolder,並且在「正常」頁面的情況下它是頁面本身。

所以,你需要首先得到的母版的的ContentPlaceHolder參考之前,你可以找到通過的FindControl控制:

Page.Master.FindControl("ContentPlaceHolder1").FindControl("TextBox1"); 

http://msdn.microsoft.com/en-us/library/xxwa0ff0.aspx

但是你爲什麼不乾脆直接引用您的控制 ?例如:

this.TextBox1.Text = "Hello World"; 

順便說一句,這是從my own answer on a similar question得出的。

+0

我很好奇他爲什麼不直接引用它。 – jcolebrand 2012-03-01 16:42:31

0

兩種情況之一發生了......無論是控制不被發現(這是最有可能的),或者未返回TextBox對象。

關於FindControl要記住的事情是它不是遞歸的......它只會查看頂級子控件。所以,如果你的文本框嵌套在另一個控件中,它將不會被找到。你可以read the MSDN docs here

你可能想使自己的FindControl的版本,這將使嵌套控件內搜索 - 實現這種方法是簡單,而且很容易地使用谷歌,富

+0

我確定遞歸查找器已經存在,他只需要查找它。 – jcolebrand 2012-03-01 16:22:11

+0

嗨,它只是在一個div中。 – 2012-03-01 16:23:53

+0

@jcolebrand其他人已經寫過這樣的內容,但它不存在於API中。你必須自己實現它或借用別人的 – 2012-03-01 16:24:57

0

地方放支架繞文本框的標記,像這樣:

TextBox formTextBox = MyPlaceHolder.FindControl("MyTextBox") as TextBox;