C# 在Webform页面中列出所有更新面板ClientID

C# 在Webform页面中列出所有更新面板ClientID,c#,asp.net,webforms,updatepanel,C#,Asp.net,Webforms,Updatepanel,有人知道如何在列表中读出我在页面上的所有UpdatePanel客户端ID吗?基本上,我需要使用一种UpdatePanel循环遍历页面中的所有控件,并显示每个控件的ClientID 我在这个页面上有四个更新面板,我正在使用这个 private string LoopUpdatePanel(ControlCollection controlCollection) { StringBuilder sb = new StringBuilder();

有人知道如何在列表中读出我在页面上的所有UpdatePanel客户端ID吗?基本上,我需要使用一种UpdatePanel循环遍历页面中的所有控件,并显示每个控件的ClientID

我在这个页面上有四个更新面板,我正在使用这个

        private string LoopUpdatePanel(ControlCollection controlCollection)
    {
        StringBuilder sb = new StringBuilder();
        foreach (Control control in controlCollection)
        {
            if (control is UpdatePanel)
            {
                sb.Append(((UpdatePanel)control).ClientID + ", ");
            }

            if (control.Controls != null)
            {
                LoopUpdatePanel(control.Controls);
            }
        }
        return sb.ToString();
    }

它返回一个空字符串???

听起来像是一个正确的逻辑,也许您正在搜索另一组控件

您是否尝试过使用debug逐步完成并检查ID


受保护的无效页面加载(对象发送方,事件参数e)
{
尝试
{
string result=“result=”;
foreach(第页控件中的控件tmpControl)
{
类型tmpType=tmpControl.GetType();
如果(tmpControl是SiteMaster)
{
foreach(tmpControl.Controls中的控制站点MasterControlItem)
{
if(SiteMasterControlItem是System.Web.UI.HtmlControls.HtmlForm)
{
int i=0;
对于(i=0;i
最后一个循环包含contentplaceholder。你可能得更深入一点。 这是用c#4.0在VS2010上试用的


HTH

不确定您正在使用什么语言或尝试了什么…请给我们一些代码,以便我们知道您尝试了什么,也许我们会发现错误

但作为一个例子,这里是如何循环控制的。只需使用您想要的属性而不是文本(在您的案例中是Id值和更新面板)。我相信获得控制的重要部分是通过整个控制层次结构,这样你就不会错过任何孩子、孙子等

    private void Page_Load(object sender, System.EventArgs e)
{
    LoopTextboxes(Page.Controls);
}

private void LoopTextboxes(ControlCollection controlCollection)
{
    foreach(Control control in controlCollection)
    {
        if(control is TextBox)
        {
            ((TextBox)control).Text = "I am a textbox";
        }

        if(control.Controls != null)
        {
            LoopTextboxes(control.Controls);
        }
    }
}

我认为它是一个包含母版页内容的控件 对c#4.0来说可能是新的 忽略它,使用内部循环。 只需检查一下你现在所有的控件,然后全部打印出来


另外,您在那里建立的方法没有正确返回值,您被调用的方法没有返回值,不是签名,而是当您调用类似LoopUpdatePanel(control.Controls)的方法时

我在上面添加了基于您的代码,它仍然返回一个空字符串-我在调试中运行过,它从未找到UpdatePanel类型的控件?尽管页面上有四个!是的,它似乎找不到任何更新面板?如上所述,我无法获取代码来理解什么是“SiteMaster”?我得到了红色下划线…如果没有母版页,请跳过该部分。它是一个包含母版页内容的控件,我认为对于c#4.0来说可能是新的,只需忽略它并使用内部循环即可。只需检查一下你现在所有的控件,然后全部打印出来。
    private void Page_Load(object sender, System.EventArgs e)
{
    LoopTextboxes(Page.Controls);
}

private void LoopTextboxes(ControlCollection controlCollection)
{
    foreach(Control control in controlCollection)
    {
        if(control is TextBox)
        {
            ((TextBox)control).Text = "I am a textbox";
        }

        if(control.Controls != null)
        {
            LoopTextboxes(control.Controls);
        }
    }
}
if (_contrl is UpdatePanel)
{

UpdatePanel _cntrl = (UpdatePanel)_contrl;

foreach (Control ctr in _cntrl.ContentTemplateContainer.Controls)
{

if (ctr is TextBox)
{

 // Do Work Here 

}
}

}