Pergunta

Eu tenho um site em asp.net que usa uma página mestra.Nesta página mestra, tenho um controle multivisualização com uma visualização que possui todo o conteúdo das páginas de conteúdo e uma visualização que possui algum conteúdo local para a página mestra, onde mostro mensagens de erro de todas as páginas de conteúdo.

Nesta visualização de erro, tenho um controle Label asp.net que exibe as mensagens de erro.Normalmente, o rótulo funciona bem, mas em alguns casos o rótulo é nulo, o que renderiza uma NullReferenceException.Agora resolvi esse caso verificando se o rótulo é nulo antes de usá-lo, mas ainda assim minha pergunta é:

Por que esse rótulo é nulo?Quais são as circunstâncias que podem gerar isso?

EDITAR: Na página mestra eu tenho um método chamado SetErrorText que pega uma string e define o rótulo.Estou chamando esse método a partir do método Page_Load das páginas de conteúdo e geralmente funciona bem.Em todos os casos, exceto dois (que descobri até agora), o rótulo é inicializado e nada separa esses dois casos de todos os que funcionam.

Além disso, todos os outros controles na página mestra são inicializados, como o controle View que abriga o rótulo.

Quando o Page_Load de uma página de conteúdo é lançado, a página mestra deve ser preenchida.

Foi útil?

Solução

Parece que o problema era de desleixo.Alguém se esqueceu de excluir os controles de conteúdo gerados automaticamente que o Visual Studio lança em todas as páginas de conteúdo em que a página mestra possui um controle ContentPlaceHolder.

Se uma página de conteúdo tiver um controle de conteúdo, todos os controles colocados no controle ContentPlaceHolder na página mestra serão nulos, ao que parece.

Outras dicas

De qual método na página mestra você está acessando o rótulo?Dependendo do estágio do ciclo de vida da página, o controle de rótulo pode ainda não ter sido carregado

Você poderia acessá-lo antes de ser criado?Verifique o ciclo de vida da página: http://msdn.microsoft.com/en-us/library/ms178472.aspx

Eu tive um erro muito semelhante.No meu caso, isso foi causado pela estranheza do compilador .NET relacionada ao arquivo do designer de controle.Mesmo que o arquivo do designer tenha os controles definidos corretamente, exclua-o, gere-o novamente e reconstrua (certifique-se de reconstruir, não apenas 'construa').Veja a resposta principal aqui sobre como regenerar o arquivo do designer:

Como você força o Visual Studio a regenerar os arquivos .designer para arquivos aspx/ascx?

Licenciado em: CC-BY-SA com atribuição
Não afiliado a StackOverflow
scroll top