以程序方式获取AjaxControlToolkit.TabPanel中的所有控件

本文关键字:控件 TabPanel 程序 方式 获取 AjaxControlToolkit | 更新日期: 2023-09-27 18:20:22

我正在尝试迭代我的页面中的所有控件,该页面包含一个ajaxtoolkit:tabcontainer和几个ajaxtoolkit:tabpanel s。我正在尝试递归地执行此操作,如下所示:

protected override void AddedControl(Control control, int index)
{
   base.AddedControl(control, index);
   ParseControls(control);
}
public void ParseControls(Control control)
{
        foreach (Control myControl in control.Controls)
        {
            ParseControls(myControl);
            if(myControl.GetType().ToString().ToLower() == "AjaxControlToolkit.TabPanel".ToLower())
            {
                AjaxControlToolkit.TabPanel tabPanel = (AjaxControlToolkit.TabPanel)myControl;
                Response.Write("tabpanel id is:" + tabPanel.ID + " |tab panel no of controls:" + tabPanel.Controls.Count.ToString() + "<br />");
            }
        }
}

我的问题是,每当我找到一个TabPanel时,我都无法遍历它的控件集合,因为TabPanel.Controls.Count总是返回0,尽管在aspx页面中我添加了文本框、标签等。我还尝试用FindControl方法在TabPanel中查找一个项,但它对我没有帮助。

      HtmlTable tbl = (HtmlTable)tabPanel.FindControl("tblContent");

有人能指出我遗漏了什么吗?非常感谢。

以程序方式获取AjaxControlToolkit.TabPanel中的所有控件

我也遇到了同样的问题。这是我的解决方案。

简单介绍一下它的作用。这将在页面上的所有控件中循环。你可以直接传入任何类型的控制。页面或只是函数的选项卡容器。然后检查控件是否是TabPanel。如果是。首先将其解析为TabPanel,然后访问控件。希望这能帮助

       private void IterateControls(Control ctrl)
    {
        foreach (Control item in ctrl.Controls)
        {
            if (item is AjaxControlToolkit.TabPanel)
            {
                TabPanel tp = item as TabPanel;
                foreach (Control tpControls in tp.Controls)
                {
                    IterateControls(tpControls);
                }
            }
            else
                if (item.Controls.Count > 1)
                {
                    IterateControls(item);
                }
                else
                {
                    if (item.GetType() == typeof(DropDownList))
                    {
                        DropDownList dl = item as DropDownList;
                       //do something  
                    }
                    else if (item.GetType() == typeof(TextBox))
                    {
                        TextBox txt = item as TextBox;
                        if (txt.ID == "testControlID")
                        {
                            //IT WORKS!! 
                        }
                        //do something  
                    }
                }
        }
    }

然后你可以调用类似的函数

    IterateControls(Page);