发现文本框我有一个页面上的文本框,但是当我使用无法在页面
TextBox formTextBox = Page.FindControl(textBox) as TextBox;
它回来null
。有没有解决的办法?我知道控件在页面上,但我无法找到它。
感谢
发现文本框我有一个页面上的文本框,但是当我使用无法在页面
TextBox formTextBox = Page.FindControl(textBox) as TextBox;
它回来null
。有没有解决的办法?我知道控件在页面上,但我无法找到它。
感谢
如果您使用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得出的。
我很好奇他为什么不直接引用它。 – jcolebrand 2012-03-01 16:42:31
两种情况之一发生了......无论是控制不被发现(这是最有可能的),或者未返回TextBox
对象。
关于FindControl
要记住的事情是它不是递归的......它只会查看顶级子控件。所以,如果你的文本框嵌套在另一个控件中,它将不会被找到。你可以read the MSDN docs here。
你可能想使自己的FindControl的版本,这将使嵌套控件内搜索 - 实现这种方法是简单,而且很容易地使用谷歌,富
我确定递归查找器已经存在,他只需要查找它。 – jcolebrand 2012-03-01 16:22:11
嗨,它只是在一个div中。 – 2012-03-01 16:23:53
@jcolebrand其他人已经写过这样的内容,但它不存在于API中。你必须自己实现它或借用别人的 – 2012-03-01 16:24:57
地方放支架绕文本框的标记,像这样:
TextBox formTextBox = MyPlaceHolder.FindControl("MyTextBox") as TextBox;
什么'textBox':
然后你就可以用鳍文本框? – SLaks 2012-03-01 16:17:39
你知道控件在页面上,但是**哪里**?你能收到你的标记吗?除此之外,你在使用'MasterPages'吗?如果这是真的,请查看我对另一个问题的回答:http://stackoverflow.com/a/8163964/284240 – 2012-03-01 16:18:12
它是否位于母版页的内容区域中? – Zachary 2012-03-01 16:20:09