Usuário com melhor resposta
Manipular controle da MasterPage na página filha

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.
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
-
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
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.
-
-
-
-
-
-
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
-
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?
-
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
-
-