循环通过div的标签

时间:2014-10-31 12:42:19

标签: html asp.net vb.net

我有一个带有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)

4 个答案:

答案 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