Ao estender um controle da web asp.net, no qual o evento deve controles web adicionais ser injectada?

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

  •  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

Foi útil?

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.

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