none
Estrutura de página problemática: MasterPage + LoginView + AJAX

    Pergunta

  • Olá todos. Estou tendo um problema para acessar componentes em uma estrutura de páginas que utiliza uma MasterPage... na verdade 2 MasterPages. Já pesquisei em outros foruns e até agora ninguém deu a menor pista de como resolver o problema. Eu sei que existe uma solução para ele, mas até agora não encontrei nenhuma. Estou construindo um sistema via WEB que possui a seguinte estrutura:

     

    MasterPage Principal

        LoginView

            ContentPlaceHolder1

               MasterPage Filha (baseada na MasterPage principal)

                   Table with 2 columns
                       ContentPlaceHolder2 (in column 1)
                       ContentPlaceHolder3 (in column 2)
                           

    Então eu construí uma página de conteúdo, baseada na Masterpage Filha. O conteúdo do ContentPlaceHolder2 desta página é um RadioButtonList ou um botão. Eu gostaria que esses componentes "trigassem" um UpdatePanel que eu coloquei no ContentPlaceHolder3. Então eu registrei os dois componentes como triggers para o UpdatePanel. Vamos considerar aqui somente um deles: o botão, porque o problema é o mesmo que eu teria se tivesse os dois.
     

    Primeiramente, durante a execução, o sistema não conseguiu encontrar o ID do botão. Fiz alguma pesquisa extensa na Internet e encontrei estruturas mais simples que a minha, onde as pessoas conseguiram resolver seus problemas nessas estruturas mais simples registrando o botão dinamicamente como trigger através de código. Aparentemente, o truque é colocar o UniqueID do botão como sendo o ControlID do trigger do UpdatePanel. E colocar este código no método Page_Init()

     

    O meu grande problema é que eu simplesmente não consigo escrever um código que funcione, porque não consigo encontrar o botão (via código) para obter o seu UniqueID. Já tentei um monte de coisas, do acesso direto via o ID que coloco no Designer do VS2008 até a utilização do FindControl. Nada parece funcionar para obter a instância do danado do botão. Abaixo segue o último código que tentei para o Page_Init().

     

    Acredito que o problema seja o momento em que eu faço o registro do trigger... estou começando a desconfiar que o Page_Init acontece antes da junção completa da masterpage com a página de conteúdo.

     

    protected void Page_Init()
        {
            if (IsPostBack)
            {
                LoginView lv = (LoginView)Master.Master.FindControl("LoginView1"); //hardcoded in the main Masterpage
                ContentPlaceHolder cph_dados = (ContentPlaceHolder)lv.FindControl("ContentPlaceHolder1").FindControl("ContentPlaceHolder2"); //obtenção do conteúdo do ContentPlaceHolder2 colocado na página de conteúdo
                ContentPlaceHolder cph_tabela = (ContentPlaceHolder)lv.FindControl("ContentPlaceHolder1").FindControl("ContentPlaceHolder3"); //obtenção do conteúdo do ContentPlaceHolder3 colocado na página de conteúdo

                AsyncPostBackTrigger trg_cmd_calcula = new AsyncPostBackTrigger();
                trg_cmd_calcula.ControlID = ((Button)cph_dados.FindControl("cmd_calcula")).UniqueID.ToString(); // obtenção do UniqueID do botão colocado no ContentPlaceHolder2
                ((UpdatePanel)cph_tabela.FindControl("udp_gridview")).Triggers.Add(trg_cmd_calcula);
            }
        }
     

        Agradeço antecipadamente por qualquer ajuda.

     

      Juliano      

    quarta-feira, 30 de abril de 2008 13:02