查找控件 - 未将对象引用设置为对象的实例

时间:2012-08-29 12:21:50

标签: asp.net vb.net

我正在尝试在我的页面上实现一个Find Control,找到一个ID为“w1test”的文本框,但是我一直收到错误,上面写着“对象引用没有设置为对象的实例”。但是我觉得一切都井井有条......

这是我的代码:

Private Sub getTextbox()
    Try
        Dim txtbox As TextBox = CType(Page.FindControl("w1test"), TextBox)
        txtbox.Text = "UPDATED"
    Catch ex As Exception
    End Try
End Sub

提前致谢。

2 个答案:

答案 0 :(得分:2)

您需要FindControl的递归版本。像这样的东西

Public Function RecursiveFindControl(container As Control, name as String) as Control
    If Not(container.ID Is Nothing) AndAlso (container.ID.Equals(name)) Then
        Return container
    End If

    For Each c as Control in container.Controls
        Dim ctrl as Control = RecursiveFindControl(c, name)
        If Not ctrl Is Nothing Then
            return ctrl
        End If
    Next
    return Nothing
End Function

使用

进行通话
 Dim txtbox As TextBox = CType(RecursiveFindControl(Page, "w1test"), TextBox)  

答案 1 :(得分:0)

以下对我有用。如果我需要迭代控件(例如TextBox0,TextBox1等),我只需从其中一个控件中获取NamingContainer,然后使用“父”控件执行搜索其他控件,如下所示。

// get NamingContainer from one of the controls
Control parent = TextBox0.NamingContainer;
// now can iterate through controls
for(int i = 0; i < someBound; i++)
{
    ((TextBox)parent.FindControl("TextBox" + i)).Text = "Text here now";
}