在页面上找不到TextBox

时间:2012-03-01 16:16:40

标签: asp.net

我在页面上有一个文本框但是当我使用

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

它回来了null。有没有解决的办法?我知道控件在页面上但我找不到。

由于

3 个答案:

答案 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;