我有一个带有ajax标签容器的aspx页面。在类中,我想找到标签容器来传递一些值。
我定义myPage
:
Page myPage = (Page)HttpContext.Current.Handler;
通过点击添加观看查看此myPage
的更多详细信息时,它会列出我要查找的标签容器。但是,当我定义我的标签容器
AjaxControlToolkit.TabContainer Workflow_TabContainer = null;
Workflow_TabContainer =
(AjaxControlToolkit.TabContainer)myPage.FindControl("Workflow_TabContainer")
as AjaxControlToolkit.TabContainer;
或
AjaxControlToolkit.TabContainer Workflow_TabContainer
(AjaxControlToolkit.TabContainer)myPage.FindControl("Workflow_TabContainer");
它找不到标签容器。我还尝试首先定义页面,而不是ContentPlaceholder,并在占位符中搜索选项卡容器。同样的问题。
非常感谢任何帮助和/或提示。
由于
答案 0 :(得分:2)
FindControl
方法仅查找子项的当前控件。
如果您不知道控件所在的页面层次结构中的哪个位置,则需要进行递归搜索 - 如果您使用模板化控件(例如TabContainer
),则可能会这样做。
正如我之前发布的similar answer:
private Control FindControlRecursive(Control rootControl, string controlID)
{
if (rootControl.ID == controlID) {
return rootControl;
}
foreach (Control controlToSearch in rootControl.Controls)
{
Control controlToReturn =
FindControlRecursive(controlToSearch, controlID);
if (controlToReturn != null) {
return controlToReturn;
}
}
return null;
}
一旦掌握了控制权,就应该使用as
进行投射,然后检查是否为空,以防它不符合您的预期:
var tabContainer = FindControlRecursively(myPage, "Workflow_TabContainer")
as AjaxControlToolkit.TabContainer
if (null != tabContainer) {
// Do Stuff
}
答案 1 :(得分:0)
如果控件位于同一页面,则可以直接访问该控件。看看下面的内容: