Israel Aece

Software Developer

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. ;)

Comentários (2) -

  • Francis

    03/08/2009 03:30:58 |

    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)

  • Paulo César Viana

    14/10/2009 03:05:59 |

    Muito interessante...é cada coisa viu!!

Os comentários estão fechados