你用的循环只能返回页的第一层的控件,也就是你所得到的Document、form、LiteralControl!
而要返回所有的控件,要用递归来实现.
服务器端的控件都放在form容器控件内,form下面也有个controls的集合,它是第二级,如果第二层下面还有控件的话(例如datagrid下面就可能还是textbox等),你就要作第三次循环,一直到最后一级.
下面的函数用以统计页面中所有控件的个数,我从别的贴子里面贴的.通过这个你就可以遍历页面中所有的控件了.
一个递归函数:
    Private Function ControlCnt(ByVal Ctrl As Object) As Integer
        Dim i As Integer
        For i = 0 To CType(Ctrl, Control).Controls.Count - 1
            If CType(Ctrl, Control).Controls(i).Controls.Count = 0 Then
                If TypeName(CType(Ctrl, Control).Controls(i))="TextBox" Then
                    mCnt = mCnt + 1
                End if
            Else
                Me.ControlCnt(CType(Ctrl, Control).Controls(i))
            End If
        Next
    End Function

解决方案 »

  1.   

    我回去再试了一下,发现在aspx页面里把各个控件用Panel容器装起来,通过循环Panel.Controls可以直接访问到各个控件,从而解决了这个问题——
    比如定义了 Panel PanelComp ,
    ...
    for(int i=0;i<PanelComp.Controls.Count;i++)
    {
       Control ctrl = PanelComp.Controls[i];
       if(ctrl is DropDownList)
       {
    DropDownList ddl = (DropDownList)ctrl1;
             //codes here ...
        }
        //codes here ...
    }