2014-10-31 133 views
0

我有一个div标签,它的id设置为在服务器上运行,因此可以从asp.net中的代码访问。通过div的标签循环

<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

您使用RUNAT“服务器“而不是runat =”服务器“ – 2014-10-31 12:45:44

+0

为什么你必须通过主人搜索'div'?你不能直接访问它吗? – 2014-10-31 12:51:28

回答

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 
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中。

0

你可以使用一个asp:Panel或者像你做的那样制作div runat服务器。
在后面的代码中可以询问控件(子元素)的一个元素。
您可以使用这些控件属性

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