2014-10-31 112 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