ASP.NET – Criando um Server Control
Veremos neste artigo como criar um server control que pode ser usado em sua aplicação.
O que é um Server Control?
Server Control nada mais é do que um controle que roda no servidor, no caso do ASP.NET, todos os controles que tem a tag “runat=server”. Por exemplo, temos o controle TextBox que contém a tag runat=server, pois as informações que são processadas por ele passa pelo servidor e retorna ao browser no formato HTML.
São os controles que ficam na ToolBox e neste artigo iremos aprender a fazer um pequeno server control e adiciona-lo na ToolBox para poder utiliza-lo em outras aplicações.
Criando um Server Control
Vamos criar uma aplicação do tipo Class Library.
- Abra o Visual Studio 2005;
- Escolha Visual C#;
- Escolha Windows e uma aplicação tipo Class Library;
Antes de começarmos, devemos adicionar uma referência a .dll System.Web. Para isso, abra o Solution Explorer, clique com o botão direito do mouse sobre “References” e escolha “Add Reference...”. Na tela que se abre, na aba .NET, role a barra de rolagem quase ao final e procure por System.Web. Selecione-o e clique em OK.
Agora, vamos ao código fazer referência a esta .dll que acabamos de inserir em nosso projeto. Insira as seguintes linhas de código, abaixo do último using no topo da sua classe:
using System.Web.UI;
using System.Web.UI.WebControls;
Devemos também inserir uma referência a esta namespace:
using System.ComponentModel;
Mas...que tipo de controle iremos criar? Vamos criar uma coisa bem simples, pois a idéia que quero passar é de como um controle desses funcionam. Depois, use sua criatividade para criar os controles de sua necessidade, pois nem tudo que nós precisamos está na ToolBox, certo?!
O controle que iremos criar é apenas um Label no qual definimos a posição Esquerda e do Topo relativa à página e ele ficará posicionado onde foi determinado.
Bem, como iremos criar um controle do tipo Label, devemos fazer com que nossa classe herde de Label. Veja o seguinte código:
public class Class1 : Label
Legal, agora iremos começar a programar nosso controle. Primeiramente, vamos inserir um atributo chamado ToolBoxData em nossa classe, que será a tag do nosso controle, quando visto pelo modo HTML no Visual Studio.
Para inserir oatributo, veja o código abaixo:
[ToolboxData("<{0}:MeuServerControl runat=\"server\" ID=\"MeuServerControl1\" ></{0}:MeuServerControl>")]
public class Class1 : Label
Obs.: Você pode dar o nome que quiser, chamei de MeuServerControl apenas para exemplo.
Iremos criar duas propriedades que serão configuráveis pelo “Property Window”, são elas Esquerda e Topo. O código a seguir mostra como criá-las:
private int _esquerda;
private int _topo;
public int Esquerda
{
get
{
int valor = _esquerda;
return valor;
}
set
_esquerda = value;
}
}
public int Topo
{
get
{
int valor = _topo;
return valor;
}
set
{
_topo = value;
}
}
Agora iremos colocar alguns atributos em nossas propriedades, são eles:
Category("Layout") = Indica que sua propriedade irá ficar na Categoria “Layout”. (Na Property Window, as propriedades são divididas por categoria)
DefaultValue("0") = O valor default que irá aparecer quando você arrastar o controle pra tela. Neste caso, na propriedade vai aparecer o valor “
Description("Posição a esquerda relativa a tela.") = A descrição da propriedade.
Browsable(true) = Indica se a propriedade irá aparecer na Property Window.
Veja como ficará o código:
private int _esquerda;
private int _topo;
[
Category("Layout"),
DefaultValue("0"),
Description("Posição a esquerda relativa a tela."),
Browsable(true)
]
public int Esquerda
{
get
{
int valor = _esquerda;
return valor;
}
set
{
_esquerda = value;
}
}
[
Category("Layout"),
DefaultValue("0"),
Description("Posição relativa ao topo da página."),
Browsable(true)
]
public int Topo
{
get
{
int valor = _topo;
return valor;
}
set
{
_topo = value;
}
}
OK, nosso controle já está quase pronto. Agora falta fazer com que ele seja renderizado pelo browser. Iremos substituir (override) dois métodos definidos em nossa classe herdada, são eles AddAttributesToRender e RenderContents.
O primeiro irá adicionar ao controle a propriedade Style juntamente com as propriedades que nós definimos, no caso, Esquerda e Topo.
Veja como fica o código:
protected override void AddAttributesToRender(HtmlTextWriter writer)
{
writer.AddAttribute(HtmlTextWriterAttribute.Style, "position:relative; left:" + this.Esquerda + "px; top:" + this.Topo + "px");
base.AddAttributesToRender(writer);
}
Por fim, iremos então substituir (override) o método RenderContents para que o nosso controle seja renderizado na linguagem HTML e mostrado na tela. Nele, nós apenas verificamos se o usuário digitou alguma coisa na propriedade Text, da Property Window, e renderizamos na tela. Veja o código:
protected override void RenderContents(HtmlTextWriter output)
{
if (this.Text.Trim() == "")
{
output.Write("MeuServerControl");
}
else
{
output.Write(this.Text.Trim());
}
}
Pronto! Agora compile o seu projeto. Será gerado uma .dll com o nome do projeto dentro da pasta Bin/Debug ou Release (depende do que voce escolheu) na pasta do seu projeto.
Para usar seu controle, abra ou crie uma web aplicação asp.net. Abra o ToolBox, onde ficam os controles padrões, clique com o botão direito e vá na opção “Choose Items...”.
Vai aparecer uma tela com vários componentes a ser adicionado e um botão “Browser...”. Clique neste botão, vá até a pasta onde está localizada a .dll do nosso controle e clique Open. Depois aperte OK e o controle geralmente irá aparecer na Categoria “General” da ToolBox.
Agora arraste-o para a tela, vá no Property Window e coloque algum valor nas propriedades que criamos. Rode sua web aplicação e veja como ficou.
Com o Internet Explorer aberto, veja o código fonte da página. Ele deve mostrar o nosso controle com a tag HTML já renderizado pelo browser. Algo parecido com isto:
<span id="MeuServerControl1" style="position:relative; left:50px; top:90px"> MeuServerControl</span>
Então é isso, espero que tenham gostado. Este é meu primeiro artigo e espero escrever vários.
Obrigado!
Thiago Lima de Vargas