我有一个包含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吗? :)
答案 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。