我正在尝试在我的页面上实现一个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
提前致谢。
答案 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";
}