aspx页面上有几个label控件,已经定义IDforeach (Control c in Page.Controls)
            {
                if (c.GetType().ToString().Equals("System.Web.UI.WebControls.Label")) && c.ID!=null)//找到所有Label控件
                {
                    ((Label)c).Text = count.ToString();
                    count++;   //count为全局变量,记录找到的TextBox数量
                }
            }
运行后没有反映,怎么回事呢?

解决方案 »

  1.   

    不是 Page.Controls 是 Form.Controls
      

  2.   

    有可能你的label不只直接放在page上,有可能是放在其他容器中。这种情况需要用递归,因为Page.Controls只能取他的子控件,而不能取孙控件
    try: private void getAllCtl(ControlCollection ctls)
    {
                foreach (Control c in ctls)
                {
                    if (c is System.Web.UI.WebControls.Label)
                    {
                        ((Label)c).Text = count.ToString();
                        count++; //count为全局变量,记录找到的TextBox数量
                    }
                    if (c.HasControls())
                    {
                        getAllCtl(c.Controls);
                    }
                }
     }然后这样调用:getAllCtl(Page.Controls);
      

  3.   

    this.Form.Controlsorthis.form1.Controls (form1是你的表单id)
      

  4.   

    TO:BearRui(开心熊 | 来地球抢分) 
    代码太摆了,很不错,果然能访问,我是用MasterPage来做的
    递归放在这里果然能解决问题,谢谢哦TO all
    谢谢大家回答我的问题,每人都有分,谢谢哦
      

  5.   

    要递归
    直接用 if ctrl is Label 判断
      

  6.   

    Page.Controls 返回的类型是ControlCollection 对象,所以前面要这么写
    foreach (ControlCollection c in Page.Controls)
      

  7.   

    赞同BearRui(开心熊 | 来地球抢分) ( )
      

  8.   

    控件不是都放在Page上的,而是以控件树的形式存在的,也就是一个控件包含若干个控件,这些子控件还可以包含自己的子控件,因此你仅仅搜索Page的直属子控件会找不到你想要的Label,通常它们都在HtmlForm或者更内层的控件里。如果你一定要这样遍历寻找,最好用递归。