UserControls Can Asp.Net saber se eles estão sendo adicionados 'final' para a hierarquia de controle?
-
07-07-2019 - |
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?
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:
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