两个用户控件之间的交互

Blu*_*mer 5 vb.net asp.net user-controls delegates nullreferenceexception

我快要疯了......

在我正在构建的应用程序中,我正在处理需要相互交互的两个动态添加的控件,但我已经将问题简化为一个简单的,因为我可以制作它的示例控件是静态加载的,它仍然存在同样的问题:调用委托时出现NullReferenceException.这是要点:

控制1

Partial Class Control1
Inherits System.Web.UI.UserControl

Private _delClicked As System.Delegate
Public WriteOnly Property UpdateLabel() As System.Delegate
    Set(ByVal value As System.Delegate)
        _delClicked = value
    End Set
End Property

Protected Sub btnButton_Click(ByVal sender As Object, ByVal e As System.EventArgs) Handles btnButton.Click
    Dim aObj(0) As Object
    aObj(0) = 1
    _delClicked.DynamicInvoke(aObj)
End Sub
End Class
Run Code Online (Sandbox Code Playgroud)

控制2

Partial Class Control2
Inherits System.Web.UI.UserControl

Protected WithEvents Control1 As New Control1
Delegate Sub ChangeLabel(ByVal int As Integer)

Protected Sub Page_Init(ByVal sender As Object, ByVal e As System.EventArgs) Handles Me.Init
    Dim delChangeLabel As New ChangeLabel(AddressOf UpdateLabel)
    Me.Control1.UpdateLabel = delChangeLabel
End Sub

Private Sub UpdateLabel(ByVal int As Integer)
    lblLabel.Text = "Value is now " & int
End Sub
End Class
Run Code Online (Sandbox Code Playgroud)

如果我在分配了Control1委托的Control2的行上放置一个断点,我可以单步执行并观察它在Control1对象中的设置.但是,当btnButton_Click事件触发时,_delClicked的值已回到Nothing.

任何帮助将不胜感激.谢谢!

rie*_*819 2

我的猜测是您失去了对回发的控制。动态添加的控件在回发时会丢失。当然,您重新创建了一个执行相同操作的控件,但这并不意味着您将能够捕获单击事件。但是该控件没有在回发之间保留其视图状态。

请参阅这篇文章,了解如何执行此操作