日期:2014-05-18  浏览次数:20442 次

我的代码怎么访问不到页面的label?达人指教
aspx页面上有几个label控件,已经定义ID

foreach   (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数量
                                }


                        }
运行后没有反映,怎么回事呢?

------解决方案--------------------
不是 Page.Controls 是 Form.Controls
------解决方案--------------------
Form.Controls
------解决方案--------------------
有可能你的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);
------解决方案--------------------
this.Form.Controls

or

this.form1.Controls (form1是你的表单id)
------解决方案--------------------
学习
------解决方案--------------------
要递归
直接用 if ctrl is Label 判断
------解决方案--------------------
每人都有分,谢谢哦

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

------解决方案--------------------
赞同
------解决方案--------------------
赞同BearRui(开心熊 | 来地球抢分) ( )
------解决方案--------------------
帮顶,学习!!
------解决方案--------------------
晕,我刚看,这问题都结了?!
------解决方案--------------------
控件不是都放在Page上的,而是以控件树的形式存在的,也就是一个控件包含若干个控件,这些子控件还可以包含自己的子控件,因此你仅仅搜索Page的直属子控件会找不到你想要的Label,通常它们都在HtmlForm或者更内层的控件里。如果你一定要这样遍历寻找,最好用递归。