2016-01-22 2 views
0

Here's сценарий,GridView внутри UserControl RowCreated события стрельбы даже после того, как UserControl не видно больше

У меня есть страница, которая имеет меню с 3 пользовательских элементов управления, только один из UC видна на время. Каждый UC имеет собственный GridView с соответствующим RowCreated Event. Я установил 3 точки останова по одному для каждого события UC RowCreated.

Из страницы, когда я нахожусь в одном из UC, допустим, UC_A, только это RowCreated Событие - это стрельба, которая в порядке. Но когда я посетить еще один UC, UC_B, то RowCreated Событие UC_A снова стрельба, и после этого RowCreated события по UC_B «s стреляет, который является ожидаемым поведением ..

Единственного код который выполняется между переключением между 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

Вы должны установить видимость в событии 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 события отдельных пользовательских элементов управления и сделать пользовательский элемент управления невидимым в соответствии с пост обратно контроля.

Смежные вопросы