Ao estender um controle da web asp.net, no qual o evento deve controles web adicionais ser injectada?
-
08-07-2019 - |
Pergunta
Eu estou tentando evitar um controle composto ou usando e ASCX, estendendo um controle existente. No entanto, estou tendo problemas com a obtenção dos controles adicionados ao controle herdado e manter sua integridade de estado de exibição / post-back. Sempre que eu adicionar os controles durante a pré-renderização, os controles aparecer, mas o post-back lança uma exceção viewstate. Eu tentei adicionar os dois lá e durante LoadViewState (que, naturalmente, era um tiro longo bobo). Init não está disponível a partir do controle que eu estou estendendo.
A exceção é Sys.WebForms.PageRequestManagerServerErrorException: Falha ao viewsstate carga. O controle árvore na qual viewstate é estar carregado deve coincidir com a árvore de controle que foi usado para salvar viewstate durante o pedido anterior. Por exemplo, ao adicionar controles dinamicamente, o controles adicionados durante um post-back must coincidir com o tipo ea posição do controles adicionados durante o inicial pedido
Solução
Na verdade, a Microsoft diz que você deve substituir o CreateChildControls método.
Você pode chamar o método da classe base antes ou depois de adicionar os controles, eu não tenho certeza se existe uma convenção lá.
protected override void CreateChildControls(){
Controls.Add(someControl);
base.CreateChildControls();
}
Espero que ajude!
Outras dicas
Você deve adicioná-los em OnInit ou em CreateChildControls. De qualquer forma, para evitar ter problemas com ViewState, leia este artigo GREAT. Possivelmente, amostra "4. Inicializar controles filho programaticamente" é o seu caso.