FindControl如果从另一个类调用它,则不起作用

时间:2014-12-16 17:20:51

标签: asp.net vb.net findcontrol

page_Init上,我创建UpdatePanel个数量,并在每个UpdatePanelPanel内创建TextBoxe个。然后我使用此面板继续进行动态添加其他控件。例如,我在每个面板中添加了ButtonAddressOf的数量。此外,我将click事件绑定到动态创建的所有按钮。 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 这些点击事件位于另一个名为 Events 的类中。在Event类的Sub中,当我尝试查找控件时,它似乎不起作用。

以下是EVENT类

中的代码
FindControl

注意:如果相同的上面的子被复制/粘贴到页面类的后面的代码,它就可以工作。

我知道我在这里错过了一些链接。可能是{{1}}未被引用应该搜索的页面。

1 个答案:

答案 0 :(得分:0)

很清楚为什么它不起作用 - 您正在运行属于FindControl类的Events。但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