在 page_Init
上,我创建了许多 UpdatePanel
,并在这些 UpdatePanel
中创建了一个 Panel
。然后,我使用此面板进一步动态添加其他控件。例如,我在每个面板中添加了一些 TextBoxe
和 Button
。此外,我将单击事件绑定(bind)到动态创建的所有按钮。这些点击事件的 AddressOf
位于另一个名为 Events 的类中。在 Event 类的 Sub 中,当我尝试查找控件时,它似乎不起作用。
这是 EVENT 类中的代码
Public Class Events
Inherits System.Web.UI.Page
Public Sub Dynamic_Btn_Click(ByVal sender As Object, ByVal e As EventArgs)
Dim SQL As New SQLControl
Dim sTempPanel1 As UpdatePanel = FindControl("MyUpdatePanel1")
MsgBox("MyUpdatePanel1" & ":" & (sTempPanel1 Is Nothing))
End Sub
End Class
注意:如果将上述相同的子代码复制/粘贴到页面类的代码后面,则它可以工作。
我知道我在这里缺少一些链接。可能是 FindControl
没有被引用到应在其中搜索的页面。
最佳答案
这很清楚为什么它不起作用 - 您正在运行属于您的 Events
类的 FindControl
。但按钮不在 Event
类上。为什么你选择这样的架构 - 这是不同的问题。
要获取按钮所在的面板,您可以调用
Dim b as Button = DirectCast(sender, Button)
Dim p as UpdatePanel = = DirectCast(b.Parent, UpdatePanel)
还请记住这一点:[FindControl] 方法仅搜索页面的直接容器或顶级容器;它不会递归搜索页面上包含的命名容器中的控件。
但是如果你确实不知道控件的确切位置,你可以编写递归函数来找到它
如果你知道你有
-- Page
-- UpdatePanel
-- Panel
-- Button
您可以硬编码
button.Parent.Parent ' <-- this is your update panel
关于asp.net - FindControl 如果从不同的类调用则不起作用,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/27510322/