gpt4 book ai didi

asp.net - FindControl 如果从不同的类调用则不起作用

转载 作者:行者123 更新时间:2023-12-02 10:29:01 24 4
gpt4 key购买 nike

page_Init 上,我创建了许多 UpdatePanel,并在这些 UpdatePanel 中创建了一个 Panel 。然后,我使用此面板进一步动态添加其他控件。例如,我在每个面板中添加了一些 TextBoxeButton 。此外,我将单击事件绑定(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/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com