【问题标题】:List All Update Panels ClientID In Webform Page列出 Web 表单页面中的所有更新面板 ClientID
【发布时间】:2011-03-20 04:07:01
【问题描述】:

有谁知道在列表中读出我在页面上的所有 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();
    }

它返回一个空字符串??

【问题讨论】:

    标签: c# asp.net webforms updatepanel


    【解决方案1】:

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

    您是否尝试过使用调试并检查 ID?


     protected void Page_Load(object sender, EventArgs e)
        {
            try
            {
                string result = "result = ";
    
                foreach (Control tmpControl in Page.Controls)
                {
                    Type tmpType = tmpControl.GetType();
    
                    if (tmpControl is SiteMaster)
                    {
                        foreach (Control SiteMasterControlItem in tmpControl.Controls)
                        {
                            if (SiteMasterControlItem is System.Web.UI.HtmlControls.HtmlForm)
                            {
                                int i = 0;
    
                                for( i =0;i < SiteMasterControlItem.Controls.Count; i++)
                                {
                                    Type tmpType2 = SiteMasterControlItem.Controls[i].GetType();
                                }
                            }
    
    
                        }
                    }
                }
    
                Response.Write(result);
            }
    
            catch(Exception ex)
            {
                Response.Write("error = " + ex.StackTrace);
            }
        }
    

    最后一个循环包含内容占位符。你可能需要更深入。 这是用 c#4.0 在 VS2010 上尝试过的

    HTH

    【讨论】:

    • 是的,它似乎没有找到任何更新面板?见上文
    • 我无法获取代码来理解“SiteMaster”是什么?我得到了红色下划线...
    • 如果您没有母版页,请跳过该位。
    • 这是一个包含母版页内容的控件,我认为可能是 c# 4.0 的新内容,只需忽略它并使用内部循环。只需检查您目前拥有的所有控件并将其全部打印出来。
    【解决方案2】:

    不确定您使用的是什么语言或尝试过什么...请给我们一些代码,以便我们知道您尝试过什么,也许我们会发现错误。

    但作为示例,这里是您如何循环控制控件。只需使用您想要的属性而不是文本(在您的情况下是 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);
            }
        }
    }
    

    【讨论】:

    • 我已经根据你的添加了上面的代码,但它仍然返回一个空字符串 - 我已经在 Debug 中运行,它从来没有找到 UpdatePanel 类型的控件?即使页面上有四个!
    【解决方案3】:

    我认为这是一个包含母版页内容的控件 可能是 c# 4.0 的新手 忽略它并使用内循环。 只需浏览您目前拥有的所有控件并将其全部打印出来。

    还有你在那里得到的方法没有正确返回值,你被称为没有返回值的方法,而不是签名,但是当你调用像 LoopUpdatePanel(control.Controls); 这样的方法时

    【讨论】:

      【解决方案4】:
      if (_contrl is UpdatePanel)
      {
      
      UpdatePanel _cntrl = (UpdatePanel)_contrl;
      
      foreach (Control ctr in _cntrl.ContentTemplateContainer.Controls)
      {
      
      if (ctr is TextBox)
      {
      
       // Do Work Here 
      
      }
      }
      
      }
      

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2017-12-12
        • 1970-01-01
        • 1970-01-01
        • 2010-10-20
        • 2014-03-09
        • 1970-01-01
        相关资源
        最近更新 更多