即使在UserControl不再可见之后,UserControl RowCreated事件中的GridView也会被触发

时间:2016-01-22 16:19:14

标签: asp.net vb.net gridview user-controls

这是方案,

我有一个包含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之前被触发。 为什么会这样?

1 个答案:

答案 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事件中,并根据回发控件使用户控件不可见。