在课堂上找到控件 - 找不到控件

时间:2011-07-04 13:35:50

标签: c# asp.net class controls find

我有一个带有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,并在占位符中搜索选项卡容器。同样的问题。

非常感谢任何帮助和/或提示。

由于

2 个答案:

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

如果控件位于同一页面,则可以直接访问该控件。看看下面的内容:

http://www.dotnetcurry.com/ShowArticle.aspx?ID=178