Desenvolvimento - ASP. NET

ASP.NET - Como transformar um Web Form em um User Control (continuação)

Semana passada eu enviei o artigo que explicava como converter um web form para um user control. Neste artigo vou mostrar como criar instâncias via programação.

por Renato Guimarães



Semana passada eu enviei o artigo que explicava como converter um web form para um user control. No artigo de hoje vou mostrar como criar instâncias via programação.

Existem duas formas de utilizar o User Control dentro do seu web form ou dentro de outro User Control. Uma é você arrastar e soltar; e a outra é você mandar bronca escrevendo em C# ou VB.NET. Vamos entender como fazer isso via programação.

Da mesma forma que você consegue adicionar um Server Control ao seu web form usando o método LoadControl da classe Page, você também pode adicionar User Control. Uma das coisas que você deve ter atenção é ao atributo className da diretiva @Control. Comentei sobre esse atributo no artigo anterior e deixei claro que ele deveria ser informado para que fosse possível você instanciar seu controle via programação. Fazendo isso você está deixando seu controle fortemente tipado. Ou seja, essa é a classe que você utiliza para fazer uma conversão de tipo (casting) para seu controle. Esse casting é necessário porque o método LoadControl retorna um objeto da classe Control, sendo assim, o casting é necessário para você conseguir utilizar os métodos e propriedades do seu controle.

Então, a diretiva @Control deve ser :

<% @Control className="TesteUserControl" %>

Vamos utilizar o seguinte controle para instanciar dinamicamente (Para construir esses exemplos estou utilizando a super ferramenta ninja WebMatrix:

Exemplo 1 - Código do User Control que será criado dinamicamente

Agora, tendo o controle, vamos registrar, usando a diretiva @Reference, esse controle no web form serve para indicarmos que estamos o referenciando. Quando estiver criando controles via programação, o tipo (quer dizer, o nome da classe do atributo className da diretiva @Control) do controle só vai estar disponível para o web form se você tiver criado a referência através dessa diretiva. O exemplo abaixo mostra uma referência ao controle que criei acima

Exemplo 2 – Fazendo referência a um user controle através da diretiva @Reference

<% @Reference Control="MeuUserControl.ascx" %>

Agora vou adicionar a referência ao controle dentro do web form que o carregará dinamicamente.

Exemplo 3 – Web form fazendo referência a um controle de usuário

A criação da instância do controle poderia ser Code Behind ou Code in Page. No meu caso usei o Code in Page. Para carregar controles dinamicamente você precisa utilizar algum componente container. Ou seja, componente que permite que outros sejam adicionados a ele – o PlaceHolder e Panel são containers. Após ter carregado o controle com o método LoadControl, fiz a conversão necessária para podermos manipular com as propriedades e métodos do controle. Em seguida, precisei adicionar o controle a uma propriedade que é do tipo ControlCollection. Consegui adicioná-lo através da linha PlaceHolder1.Controls.Add(retorno). Quando você adiciona controles a um objeto do tipo ControlCollection usando o método Add, eles são colocados dentro de uma posição na ordem em que foram adicionados. Sendo assim, eles vão aparecer nessa ordem. Para adicionar seu controle em uma posição específica você deve usar o método AddAt para especificar a posição exata do controle.

Gostaria de reforçar mais uma vez a importância dos user controls para você reutilizar seu código cada vez mais. Além disso, seu código fica cada vez mais fácil de manter.

Obrigado a todos mais uma vez e um grande abraço.

Renato Guimarães

Renato Guimarães - Bacharel em Sistemas de Informação e trabalha com tecnologia da informação há mais de 15 anos.