以程序方式获取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");
有人能指出我遗漏了什么吗?非常感谢。
我也遇到了同样的问题。这是我的解决方案。
简单介绍一下它的作用。这将在页面上的所有控件中循环。你可以直接传入任何类型的控制。页面或只是函数的选项卡容器。然后检查控件是否是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);