我在页面上有一个文本框但是当我使用
时TextBox formTextBox = Page.FindControl(textBox) as TextBox;
它回来了null
。有没有解决的办法?我知道控件在页面上但我找不到。
由于
答案 0 :(得分:4)
如果您使用的是MasterPages
并且此控件位于ContentPlaceholder
中的页面中,则您无法直接通过FindControl
获取对该控件的引用,因为页面的ControlCollection
是MasterPage本身。
那讲得通。当控件位于具有MasterPage的页面的顶层时,您无法保证ID是唯一的,因为其他ContentPages也可能具有此ID的控件,FindControl
今天可以返回另一个控件而不是明天。
如果您查看要查找的控件的NamingContainer
,则会看到MasterPage
的情况为ContentPlaceHolder
,如果是“正常”页面这是Page本身。
因此,您需要首先获得对MasterPage的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。
答案 1 :(得分:0)
发生了两件事之一......要么没有找到控件(这是最有可能的),要么就是没有返回TextBox
对象。
关于FindControl
要记住的事情是它不是递归的......它只会查看顶级子控件。因此,如果您的文本框嵌套在另一个控件中,则无法找到它。你可以read the MSDN docs here。
您可能想制作自己的FindControl版本,它将在嵌套控件中进行搜索 - 实现这样的方法很简单,可以使用google-foo轻松找到
答案 2 :(得分:0)
在标记的文本框周围放置一个占位符,如下所示:
<asp:PlaceHolder ID="MyPlaceHolder" runat="server>
<asp:TextBox ID="MyTextBox" runat="server" />
</asp:PlaceHolder>
然后您可以使用以下方法查找文本框:
TextBox formTextBox = MyPlaceHolder.FindControl("MyTextBox") as TextBox;