Propriedades nos Arquivos ASCX

Hoje precisei criar propriedades de leitura (Public Property) dentro do meu arquivo ASCX para que eles sejam acessíveis fora dele, ou seja, precisava usar esses dados no meu WebForm (ASPX). No primeiro momento criei as propriedades:

Private m_nome As String
Private m_email As String

Public ReadOnly Property Nome As String
    Get
        Return Me.m_nome
    End Get
End Property

Public ReadOnly Property EmailAs String
    Get
        Return Me.m_email 
    End Get
End Property

Até aqui sem problemas. Arrastei o meu WebUserControl (ASCX) para dentro de meu WebForm(ASPX) e no evento Page_Load do meu WebForm estava fazendo:

Private MeuUserControl As WUCTopo

Private Sub Page_Load(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles MyBase.Load
    Response.Write(MeuUserControl.Nome)
    Response.Write(MeuUserControl.Email)
End Sub

Só que nesse caso sempre os valores eram nulos. Quando decidi rodar em Debug com BreakPoints para ver o que acontecia, vi que o Evento Page_Load do WebForm (ASPX) é executado antes do mesmo Evento (Page_Load) do WebUserControl (ASCX). Com isso a solução foi usar o Evento Page_PreRender que é executado antes da página ser exibida, mas é chamado após todo o processamento dentro dos WebUserControls. Abaixo o código correto:

Private Sub Page_PreRender(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles MyBase.PreRender
    Response.Write(MeuUserControl.Nome)
    Response.Write(MeuUserControl.Email)
End Sub

Então a ordem de execução dos Eventos fica:

1 – Executa o Evento Page_Load do WebForm (ASPX).
2 – Executa o Evento Page_Load  WebUserControl (ASCX).
3 – Executa o Evento Page_PreRender do WebForm (ASPX).
4 – Executa o Evento Page_PreRender do WebUserControl (ASCX).

Agora fica claro porque no Evento Page_Load do WebForm não conseguia visualizar as Propriedades. 😉

Anúncios