我的代码怎么访问不到页面的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或者更内层的控件里。如果你一定要这样遍历寻找,最好用递归。