[翻译]遍历ASP.NET页面控件
[翻译]遍历ASP.NET页面控件
Looping Through Controls in ASP.NET
“如何遍历ASP.NET页面所有的控件呢?“,这是在社区发问的问题中最普遍的问题之一。通常我们对这个问题的回答为:”使用Page类的controls属性来实现”!这个controls属性可以使我们获取一个控件的所有子控件,但是如果其中的一个子控件同样拥有自己的子控件,仅仅使用这个属性便很难获取ASP.NET页面所有的控件。所以,要根本解决这个问题,我们需要书写一些额外的方法以获取页面中的所有控件。
假设页面中有若干个TextBox ,我们想遍历整个页面,然后获取所有TextBox的name和value ,并将它们显示在DataGrid中。
在我们开始遍历页面之前,需要建立一个类,用于存放那些TextBox的name和value ,代码如下:
Public Class UtilityObj
Private _name As String
Private _value As String
Public Sub New(ByVal Name As String, ByVal Value As String)
_name = Name
_value = Value
End Sub
Public Property Name() As String
Get
Return _name
End Get
Set(ByVal Value As String)
_name = Name
End Set
End Property
Public Property Value() As String
Get
Return (_value)
End Get
Set(ByVal Value As String)
_value = Value
End Set
End Property
End Class |
这个类包含两个属性:"name" 和 "value",再定义一个公有的Arraylist(oArraylist),用于存储数据。如图:
要实现遍历ASP.NET页面所有的控件,我们还需要定义一个主要的方法。这个方法接收一个Control类型的参数,如果这个参数为textbox,则存储它的 name 和 value。
代码如下:
Public Sub LoopingControls(ByVal oControl As Control)
Dim frmCtrl As Control
oArrayList = New ArrayList
For Each frmCtrl In oControl.Controls
If TypeOf frmCtrl Is TextBox Then
oArrayList.Add(New UtilityObj(frmCtrl.ID, DirectCast(frmCtrl, TextBox).Text))
End If
If frmCtrl.HasControls Then
LoopingControls(frmCtrl)
End If
Next
End Sub |
我们可以使用这个方法来实现遍历ASP.NET页面所有的控件
LoopingControls(Page)
DataGrid1.DataSource = oArrayList
DataGrid1.DataBind()