UserControls Can Asp.Net saber se eles estão sendo adicionados 'final' para a hierarquia de controle?

StackOverflow https://stackoverflow.com/questions/1423021

Pergunta

Eu tenho um controle de usuário que usa o paradigma if(!IsPostBack){//initialize myself} padrão para evitar a inicialização fazendo re-durante postagens (assim, a negociação menos golpes DB para o aumento do uso ViewState). Essa abordagem me serve bem a maior parte do tempo, mas há um lugar onde eu quiser adicionar este controle para a hierarquia de controle 'tardio', durante uma postagem.

Isto, naturalmente, faz com que a lógica de inicialização falhar, e o controle a ser processado em um estado não inicializado.

O guarda que eu deveria estar usando para determinar se devo iniciar, desde !IsPostBack não é cortá-lo? Eu poderia definir um sinalizador durante LoadViewState, mas que parece um pouco hackish. O que eu gostaria de encontrar alguma condição que só acontece quando um controle é primeiro adicionado à hierarquia de controle, ea chave sobre isso. Será que as houver condição de um?

[editar] pseudocódigo Amostra segue para a página que contém:

protected void Page_Prerender(object sender, EventArgs e)
{
    Controls.Add(LoadControl("some_control.ascx"));
}

Existe uma maneira para some_control saber de ter sido adicionado tarde?

Foi útil?

Solução 4

Outras pesquisas não me levar a uma solução geral para este problema. O que eu acabei fazendo foi definindo um sinalizador no Page_LoadViewState que suprimiu a inicialização do controle -. Efetivamente a mesma coisa que guardava a inicialização com !IsPostBack, mas um pouco mais preciso

Outras dicas

Você não pode usar o construtor para inicializar seus controles filho? (Ou criar um método de inicialização) Então você controlar quando o controle é inicializado.

Talvez isso vai ajudar você a entender o seu problema: “... e se um controle é criado em um manipulador de eventos e adicionados dinamicamente para a árvore de controle? Nesse caso, o controlo desempenha catch-up. Assim que é adicionado à árvore de controle, ele começa a executar as suas fases até atingir a fase atual da página ...”

Mais informações aqui:

http://weblogs.asp.net/vga /archive/2003/08/11/23498.aspx

Não há realmente um conceito de adicionar um controle para a "primeira" vez, pois lembre-se que cada vez que você solicitar uma página, um new objeto página é criada, com toda novos instâncias de controle. instâncias de controle criados anteriormente não estão sendo adicionados ao seu novo objeto página.

Por que a lógica de inicialização falhar? Talvez se você postou que o código que poderia sugerir algo -. Isso não parece que deve necessariamente tem que ser o caso

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