这是方案,
我有一个包含3个用户控件菜单的页面,当时只有一个UC可见。 每个UC都有它自己的GridView,它有各自的RowCreated事件。 我为每个UC的RowCreated事件设置了3个断点。
从Page,当我访问其中一个UC时,让我们说 UC_A ,只有它的RowCreated事件正在解雇,这很好。但当我访问另一个UC UC_B 时, UC_A 的RowCreated事件再次触发,之后 UC_B 的RowCreated事件发生了射击这是预期的行为..
UC之间切换之间执行的唯一代码位于父页面:
Protected Sub dlMenu_ItemCommand(ByVal source As Object, ByVal e As System.Web.UI.WebControls.DataListCommandEventArgs)
UC_A.Visible = false
UC_B.Visible= true
UC_B.LoadPrincipalPage() 'Which has no code in common with the UC_A
End Sub
请注意,RowCreated事件在父页面的dlMenu_ItemCommand之前被触发。 为什么会这样?
答案 0 :(得分:1)
您应该在Page_Load事件中设置可见性。现在,您正在更改页面生命周期中的可见性,此时最初可见的控件已触发其事件。
如果您正在进行常规回发,请使用以下方法。
Protected Sub Page_Load(ByVal sender As Object, ByVal e As System.EventArgs) Handles Me.Load
Dim postbackControl As String = Page.Request.Params("__EVENTTARGET")
If Not String.IsNullOrWhiteSpace(postbackControl) AndAlso postbackControl = dlMenu.UniqueID Then
UC_A.Visible = False
UC_B.Visible = True
End If
End Sub
您甚至可以将此代码放在单个用户控件的Page_Load事件中,并根据回发控件使用户控件不可见。