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

时间:2013-06-28 15:19:41

标签: c# asp.net ajaxcontroltoolkit tabpanel

我正在尝试遍历我的页面中的所有控件,其中包含一个带有几个ajaxtoolkit:tabpanel的ajaxtoolkit:tabcontainer。我试图以递归方式执行此操作,如下所示:

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");

有人能指出我缺少的东西吗?谢谢!

1 个答案:

答案 0 :(得分:0)

我在同样的问题上挣扎。这是我的解决方案。

简要说明它的作用。这将遍历页面上的所有控件。你可以传入任何类型的控件。页面或只是函数的tabcontainer。然后检查控件是否是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);
相关问题