2012-08-17 44 views
1

访问服务器端控制在我的Default.aspx页面我有一堆用ID和RUNAT =“服务器”的div:其ID属性在ASP.net

<div id="serverOne" runat="server"></div> 
<div id="serverTwo" runat="server"></div> 
<!--etc...--> 

在我背后说我的代码我们已经声明了一个具有2个值的多维数组(或网格) - 第一个是IP地址,第二个是服务器名称。

Dim servers = {{"10.0.0.0", "serverOne"}, {"10.0.0.1", "serverTwo"}} 

我的问题是,有没有一种方法可以从我的代码中使用数组中的值来定位我的div?

For i As Integer = 0 To 1 

    'This is what I want it to do: 
    servers(i, 1).InnerHtml = "<span>Testing " & servers(i, 1) & "</span>" 

Next 

回答

2

您可以使用页面上的FindControl方法执行此操作。然而,开箱即用的FindControl只能看到第一级的孩子,而不会进入儿童的孩子。为了处理这个问题,你需要使用一个帮助方法,允许FindControl通过控制层次递归搜索找到你想要的。一旦你的,这是很容易找到你的<div>只是使用字符串ID属性

Protected Function FindControlRecursive(control As Control, id As String) 

    If (control.ID = id) Then 
     Return control 
    End If 

    For Each ctl In control.Controls 

     Dim foundControl = FindControlRecursive(ctl, id) 

     If (foundControl IsNot Nothing) Then 
      Return foundControl 
     End If 

    Next 

    Return Nothing 

End Function 

:此方法添加到您的代码背后,或多个页面可以访问某些共享类。

For i As Integer = 0 To 1 

    Dim div = CType(FindControlRecursive(Me, servers(i, 1)), HtmlGenericControl) 
    div.InnerHtml = "<span>Testing " & servers(i, 1) & "</span>" 

Next 

参考:http://forums.asp.net/t/1107107.aspx/1

+0

太感谢你了!它像一个魅力! – user973259 2012-08-17 14:56:32