none
Manipular controle da MasterPage na página filha RRS feed

  • Pergunta

  • Pessoal,

    Meu cenário é o seguinte: Tenho uma masterpage principal, onde atende o sistema em todo. Tbm tenho uma master page segundaria que herda a masterpage principal. Criei um .aspx qualquer e a masterpage dela é a segundaria.

    Na master page segundaria tento manipular uns controles que existem na masterpage principal com o seguinte código:

    if (!IsPostBack)
            {
                //Atribuindo Título da pagina
                ((Label)Page.Master.FindControl("LblTituloPagina")).Text = "Importação Proposta";
                ((Label)Page.Master.FindControl("LblTituloPagina")).Visible = true;              
            }

    E na página .aspx tento manipular uns controles existentes na master page segundaria:

    if (!IsPostBack)
            {
                ((Label)Page.Master.FindControl("LblTituloNomeSeguradora")).Text = "ALLIANZ";
                ((Label)Page.Master.FindControl("LblNomeSeguradora")).Text = "ALLIANZ";
            }
    Lembrando que os controles existem em suas páginas e mesmo assim da o seguinte erro: 

    System.NullReferenceException: Object reference not set to an instance of an object.

    Alguém sabe o que pode estar acontecendo? Desde já agradeço.



    quarta-feira, 15 de agosto de 2012 16:57

Respostas

  • Exemplo:

    declare  na sua Master Page uma propriedade que receberá a intancia do controle:

    public HyperLink teste { get { return hlInicio; } set { hlInicio = value; } }

    Onde hlInicio é um Hyperlink da minha MasterPage;

    Feito isso, vá na página filha que está vinculada a masterpage. Coloque a diretiva acima citada "<@% Master..." e aponte o virtualpath para a MasterPage.

    Acesse o controle da masterPage pela página Filha, diretamente pela propriedade. Detalhe, o intelicense detectará a propriedade.

    Master.teste.Visible = false;

    • Marcado como Resposta Gustavo Brum quarta-feira, 15 de agosto de 2012 18:44
    quarta-feira, 15 de agosto de 2012 18:05
  • Tá errado na declaração da propriedade. tem de ser assim:

    public HyperLink teste

    {

          get { return hlInicio; }

          set { hlInicio = value; }

    }

    A propriedade tem que receber o controle (pelo get) e o controle tem de ser setado sempre que você usar a propriedade (pelo set).

    Então, fica dessa forma, pelo seu exemplo:

    public Label LabelTituloPagina
        {
            get { return LblTituloPagina; }
            set { LblTituloPagina = value; }
        }

    E retira o "FindControl" pelo amor... rsrsr

    • Marcado como Resposta Gustavo Brum quarta-feira, 15 de agosto de 2012 18:43
    quarta-feira, 15 de agosto de 2012 18:30

Todas as Respostas

  • Você tem que setar a referência do objeto Master pela diretiva:

    <%@ MasterType VirtualPath="" %>

    No virtual path especifique o caminho da master page que quer manipular. Caso não faça isso, o objeto "Master" será nulo e dará o erro dito por você acima.

    quarta-feira, 15 de agosto de 2012 17:16
  • Coloque a diretiva citada logo abaixo da diretiva da página no aspx...
    quarta-feira, 15 de agosto de 2012 17:16
  • Marcos,

    Obrigado pela resposta. Adicionei a diretiva de todas as formas e ainda o erro continua. Nao acha os controles =/

    quarta-feira, 15 de agosto de 2012 17:30
  • Crie uma propriedade na sua master page que receberá a instancia do seu controle a ser manipulado. Então acesse essa propriedade na sua página filha, ao invéz de usar o FindControl

    quarta-feira, 15 de agosto de 2012 17:41
  • Tucão veja se isso resolve o seu problema:

    http://stackoverflow.com/questions/461911/asp-net-accessing-master-page-elements-form-the-content-page


    Se a resposta foi útil por favor qualifique! Janderson Candido de Mattos - MCTS

    quarta-feira, 15 de agosto de 2012 17:41
  • Marcos,

    Poderia dar um exemplo?

    quarta-feira, 15 de agosto de 2012 17:58
  • Exemplo:

    declare  na sua Master Page uma propriedade que receberá a intancia do controle:

    public HyperLink teste { get { return hlInicio; } set { hlInicio = value; } }

    Onde hlInicio é um Hyperlink da minha MasterPage;

    Feito isso, vá na página filha que está vinculada a masterpage. Coloque a diretiva acima citada "<@% Master..." e aponte o virtualpath para a MasterPage.

    Acesse o controle da masterPage pela página Filha, diretamente pela propriedade. Detalhe, o intelicense detectará a propriedade.

    Master.teste.Visible = false;

    • Marcado como Resposta Gustavo Brum quarta-feira, 15 de agosto de 2012 18:44
    quarta-feira, 15 de agosto de 2012 18:05
  • Marcos,

    codigo da master page(Inicial.master) principal:

    Label labelTituloPagina;
    
        public Label LabelTituloPagina
        {
            get { return (Label)Page.FindControl("LblTituloPagina"); }
            set { labelTituloPagina = value; }
        }

    Diretiva na master page segundaria  (Pagina Filha)

    <%@ MasterType VirtualPath="~/Inicial.master" %>

    Código na master page segundaria para utilizar a propriedade:

    Label teste = Master.LabelTituloPagina;
                teste.Text = "Testeeeeeeee";

    E continuaaaa dando o mesmo erro. Fiz algo de errado?

    quarta-feira, 15 de agosto de 2012 18:22
  • Tá errado na declaração da propriedade. tem de ser assim:

    public HyperLink teste

    {

          get { return hlInicio; }

          set { hlInicio = value; }

    }

    A propriedade tem que receber o controle (pelo get) e o controle tem de ser setado sempre que você usar a propriedade (pelo set).

    Então, fica dessa forma, pelo seu exemplo:

    public Label LabelTituloPagina
        {
            get { return LblTituloPagina; }
            set { LblTituloPagina = value; }
        }

    E retira o "FindControl" pelo amor... rsrsr

    • Marcado como Resposta Gustavo Brum quarta-feira, 15 de agosto de 2012 18:43
    quarta-feira, 15 de agosto de 2012 18:30
  • acabei de testar aqui comolhe falei e funcionou legal...
    quarta-feira, 15 de agosto de 2012 18:31
  • Mascos,

    Funcionou!!!!! Obrigado. Realmente eu viajei legal nesse FindControl(), parei aqui para pensar, meu Deus!!! AJRJiorojaORPJAr²²

    Valeu mesmo pela ajuda!

    quarta-feira, 15 de agosto de 2012 18:43