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. 😉
Bom artigo
Tem muitas vantagens usar .ascx nomeadamente o facto de desta forma se conseguir normalizar os controlos dos formulários:
dropdownlist
valores a listar
valores a a guardar
textbox
dimensão
waternark
qq um dos controlos anterior pode ficar no .ascx com validators watermark etc.
pode posteriormente ser reutilizado em diversos tipos de formularios no meu caso internet e intranet (backoffice)
Muito interessante…é cada coisa viu!!