我有一个带有id的div标签,该标签设置为在服务器上运行,因此可以从asp.net中的代码访问。
<div id="myTst" runat="server">
<asp:label id="lbl1" Text="Hello" runat="server" />
<asp:label id="lbl2" Text="World" runat="server" />
</div>
我正在尝试加载控件然后遍历它,找到div的所有标签子控件然后读取它们的文本值。我想知道是否有人知道这样做的好方法。
在我背后的代码中,我正在做类似的事情......
Dim myPlaceHolder As ContentPlaceHolder = DirectCast(Master.FindControl("ContentPlaceHolder1"), ContentPlaceHolder)
Dim cntrlDiv As HtmlControl = DirectCast(myPlaceHolder.FindControl("myTst"), HtmlControl)
答案 0 :(得分:0)
听起来你需要这样的东西。
''' <summary>
''' Returns a recursive list of controls inside the current control.
''' </summary>
''' <param name="control">The control.</param>
''' <returns></returns>
<Extension()> _
Public Function RecursiveControlList(ByVal control As Control) As Generic.List(Of Control)
Dim lst As New Generic.List(Of Control)
Return DoRecursiveControlList(control, lst)
End Function
Private Function DoRecursiveControlList(ByVal control As Control, ByVal currentList As Generic.List(Of Control)) As Generic.List(Of Control)
If Not control Is Nothing Then
For Each child As Control In control.Controls()
currentList.Add(child)
DoRecursiveControlList(child, currentList)
Next
End If
Return currentList
End Function
答案 1 :(得分:0)
如果div
位于(Content
- )Page
之上,则您无需通过FindControl
从主设备进行搜索。您可以直接访问它。然后,您可以使用Controls.OfType
获取div中的所有标签:
Dim allLabels = Me.myTst.Controls.OfType(Of Label)()
For Each label As Label In allLabels
Dim text = label.Text
Next
Enumerable.OfType
是一种按类型过滤的便捷方法。它递归不搜索。但是,无论如何都没有必要,因为标签没有嵌套在不同的NamingContainer
中。
答案 2 :(得分:0)
你可以使用asp:Panel,或者就像你做了div runat服务器一样。
在后面的代码中,您可以询问元素的控件(子元素)。
您可以使用controls属性
div.controls
你可以遍历这些,然后你必须像这样检查标签类型
//Loop through each Control in ControlCollection.
foreach (Control control in base.Controls)
{
if (control is Label)
{
//Do your thing here
var a = control.Text;
}
}
有关详细信息,请参阅http://msdn.microsoft.com/en-us/library/system.windows.forms.control.controls(v=vs.100).aspx
编辑:我曾尝试在vb.net中为你编写' Loop through each Control in ControlCollection.
For Each control As Control In MyBase.Controls
If TypeOf control Is Label Then
'Do your thing here
Dim a As String
a = control.Text
End If
Next
答案 3 :(得分:0)
循环遍历div中的每个控件并检查它是否是标签,如果它是标签然后将其测试变为字符串变量,则可以使用以下代码
Dim s As String = ""
Dim l As Label
For Each ctrl As Control In myTst.Controls
If TypeOf (ctrl) Is Label Then
l = DirectCast(ctrl, Label)
s &= l.Text '<--- output will be Helloworld in this situation
End If
Next