大家好,为什么无效呢<body>
    <form id="form1" runat="server">
    <div>
        <asp:TextBox ID="TextBox1" runat="server"></asp:TextBox>
         <asp:TextBox ID="TextBox2" runat="server"></asp:TextBox>
          <asp:TextBox ID="TextBox3" runat="server"></asp:TextBox>
    </div>
    </form>
</body>
foreach (Control c in this.Controls)
        {
            if (c.GetType() == typeof(TextBox))
            {
                TextBox t = (TextBox)c;
                t.Text = "test";
            }
        }
        foreach (System.Web.UI.Control childControl in Page.Controls)
        {
            if (childControl is TextBox)
            {
                ((TextBox)childControl).Text = "test";
            }
        }  放在Page_Load里、Button事件里,两个遍历都没有用啊,TextBox的值都是空的,为什么呢?

解决方案 »

  1.   

    WebForm不行吗,记得以前是可以的,是不是哪个地方写错了,大虾们看看啊
      

  2.   

            foreach (Control control in Controls)
            {
                for (int i = 0; i < control.Controls.Count; i++)
                {
                    if (control.Controls[i].GetType().Name.ToLower() == "textbox")
                    {
                        TextBox tb = (TextBox)control.Controls[i];
                        tb.Text = "";
                    } 
                }
            }
      

  3.   

    换个方法也可以实现:
     object[] txt = new object[] { TextBox1, TextBox2, TextBox3 };
                for (int i = 1; i < 4; i++)
                {               
                    ((TextBox)txt[i - 1]).Text = "test" + i.ToString();
                }  
    运行后3个TextBox显示:test1,test2,test3
      

  4.   

    别遍历Page.Controls 遍历form1的Controls 
      

  5.   

    用JS试试 
    function funInsertPerson(){
        var myArray = new Array();
        var list=document.getElementById("form1").getElementsByTagName("input");  
        for(var i=0;i<list.length && list[i];i++){
          //判断是否为文本框
          if(list[i].type=="text"){ 
             list[i].value="";
          }      
        }
      

  6.   

    顶,高人,确实是这样,为什么遍历Page不能出来呢?谁能解释下吗
      

  7.   

    <div runat="server" id="Div1">
                <asp:TextBox ID="TextBox1" runat="server"></asp:TextBox>
             <asp:TextBox ID="TextBox2" runat="server"></asp:TextBox>
              <asp:TextBox ID="TextBox3" runat="server"></asp:TextBox>            <asp:Button ID="Button1" runat="server" onclick="Button1_Click" Text="Button" />    </div>
    foreach (Control c in this.Div1.Controls)
                {
                    //Response.Write(c.GetType().ToString());
                    if (c.GetType() == typeof(TextBox))
                    {
                        TextBox t = (TextBox)c;
                        t.Text = "test";
                    }
                }
      

  8.   

    foreach (Control c in this.Controls) 
            { 
                if (c.GetType().ToString() == "System.Web.UI.WebControls.TextBox") 
                { 
                    ((TextBox)c).Text = "test"; 
                } 
            } 
      

  9.   


    Page.Controls和form1.Controls获取的控件不相同,Page.Controls并能获取到form1内的控件,
    你可以这样测试一下
    string str2="";
    foreach (Control c in form1.Controls)//这里切换Page和form1
    {
    string str = c.GetType().ToString();
    if (c.GetType() == typeof(TextBox))
    {
    TextBox t = (TextBox)c;
    t.Text = "test";
    }
    if(str2==""){str2 = str;}else{str2+=","+str}
    }
    在页面放一个LABLE,最后给lable设一个TEXT属性,看看都便利什么。
      

  10.   

    一个Controls集合就表示当前那么"一层" 至于再里面的它不管 所以会有"迭代遍历页面控件"这个事情
      

  11.   

        foreach(Control ctl in form1.Controls) 
      {
          Response.Write(ctl.GetType().Name+",");
        if(ctl.GetType().Name=="TextBox") 
        { 
            TextBox tb =new TextBox(); 
            tb=(TextBox)this.FindControl(ctl.ID);
            tb.Text = "ok";
          //  Response.Write(" <script>alert('" + tb=.Text+ "的值为空。'); </script>"); 
          } 
      }测试OK.
      

  12.   


    if(control.hascontrols)
    {
        //还需再遍历....
    }惭愧 非高人!~
      

  13.   

    晕倒,,,你自己看看,你的text本来就没赋值,在遍历的时候值肯定为空了,,
    请楼主加上Text属性试试