通过ASP.net中的ID属性访问服务器端控件

时间:2012-08-17 14:16:48

标签: asp.net vb.net multidimensional-array runatserver

在我的default.aspx页面上,我有一堆带有ID和runat =“server”的div:

<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

1 个答案:

答案 0 :(得分:3)

您可以使用页面上的FindControl方法执行此操作。但是,开箱即用的FindControl只能看到第一级别的孩子,而不会进入孩子的孩子。为了处理这个问题,你需要使用一个帮助方法,允许FindControl递归搜索控件层次结构以找到你想要的那个。将此方法添加到您的代码后面,或者一些多个页面可以访问的共享类:

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

完成后,只需使用字符串ID属性即可轻松找到<div>

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

相关问题