0

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

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

有人可以指出我缺少什么吗?谢谢!

4

1 回答 1

0

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

简述它的作用。这将遍历页面上的所有控件。您可以传入任何类型的控件。页面或只是功能的选项卡容器。然后检查控件是否是 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);
于 2013-08-22T06:14:23.787 回答