用户控制中的自定义事件

时间:2011-05-10 14:57:26

标签: vb.net events controls

我有一个包含usercontrol(ascx)的页面(aspx)。在回发aspx时,我想在ascx中读取一些控制值。所以在阅读了一些good articles后,我在我的aspx中创建了一个事件,该事件在回发时触发。事件处理程序位于ascx中,只是将我感兴趣的值写入viewstate,以便父页面可以读取它们。 问题是我的事件处理程序永远不会被命中,即使我看到事件是在我逐步执行代码时引发的。所以我的代码在尝试读取视图状态(它是空的)时会发生炸弹

这是我在我的aspx中得到的:

Partial Public Class Visitor
    Inherits System.Web.UI.Page
    Public Event PagePostback(ByVal sender As Object, ByVal e As System.EventArgs)
.
.
.
    Private Sub SaveAssignment(ByVal e As EventArgs)
        RaiseEvent PagePostback(Me, e) 'Tell usercontrol to post its control values to the viewstate
    'read viewstate and save its values
    End Sub

这是我的ascx中的内容:

Partial Public Class GenVstr
    Inherits System.Web.UI.UserControl
    Protected WithEvents pageVisitor As Visitor
    Public Property visitType() As String
        Get
        Return ViewState("visitType").ToString
        End Get
    Set(ByVal value As String)
        ViewState("visitType") = value
    End Set
    End Property
    Public Sub ParentPostback(ByVal sender As Object, ByVal e As EventArgs) Handles pageVisitor.PagePostback
        With Me
        If optVIP.Checked Then .visitType = "VIP"
        If optFamily.Checked Then .visitType = "Family"
        If optMedia.Checked Then .visitType = "Media"
        If optGuest.Checked Then .visitType = "Guest"
        If optConference.Checked Then .visitType = "Conference"
        End With
    End Sub

哦,我碰巧提到我动态加载ascx吗? :)

2 个答案:

答案 0 :(得分:2)

我想我发现了这个问题。就在这一行:

Public Sub ParentPostback(ByVal sender As Object, ByVal e As EventArgs) Handles pageVisitor.PagePostback

特别是在我的Handles部分中,“pageVisitor”是我声明为WithEvents的变量的名称。我应该处理我的usercontrol(它的ID)PagePostback事件的名称而不是处理它。

所以看起来应该是这样的:

Public Sub ParentPostback(ByVal sender As Object, ByVal e As EventArgs) Handles [myusercontrol's ID].PagePostback

答案 1 :(得分:0)

我认为你需要在动态创建控件时调用addhandler。