terça-feira, 15 de abril de 2008

ASP.NET server controls – Visão Geral

Os controles de servidor do ASP.NET permitem uma reutilização, maior poder e uso de alto nível de diversas funcionalidades. Apesar de sua utilização, a definição de propriedades e eventos ser fácil como no desenvolvimento winforms, o resultado destes para o navegador será como conteúdos HTML, javascript e estilos.

Estes controles encapsulam serviços como gerenciamento de estado, leitura de dados enviados pelo usuário e em alguns casos adicionam vários recursos para que os controles fiquem com mais funcionalidades e facilidade de uso. Então algumas das funcionalidades que estes controles expõem são:

  • Gerenciamento de estado

  • Acesso simples a valores de objetos, sem a necessidade de usar o objeto Request

  • Possibilidade de programar eventos

  • Retorno para o cliente customizado baseado nas características do navegador.

Além disso é possível criar controles customizados e de usuários.

Hierarquia de controles

Todos controles ASP.NET descendem de forma direta ou indireta do System.Web.UI.Control. Veja na Imagem 1:



Imagem 1 - Hierarquia de Controles ASP.NET

Como é possível na Imagem 1 até a classe Page, que representa a página do ASP.NET indiretamente descende de System.Web.UI.Control

Existem duas hierarquias fundamentais de controles de servidor ASP.NET. HTML Controls, Imagem 2 e Web Controls, Imagem 3.






Imagem 2 - Hierarquia de Controles Html






Imagem 3 - Hierarquia de Controles Web

Divisão por usabilidade

Pensando na usabilidade dos controles, ainda poderíamos definir a organização destes da seguinte forma:

  • HTML server controls: Controles que são diretamente mapeados para elementos HTML, permitindo a programação destes no servidor ou codebehind.

  • Web server Controls: Controles com mais funcionalidades que os HTML server controls. Exemplos são o controle de calendário, gridview, treeview e outros. Os controles Web server controls não necessariamente representam controles HTML.

  • Validation Controls: Controles de validação, incorporam lógicas para habilitar que seja validado dados digitados pelo usuários em diversos outros controles como exemplo o TextBox. Pode ser verificar valores de controles

  • User Controls: Controles de usuários, são controles que são criados como páginas e podem ser reutilizados em páginas ou até em outros user controls.

ASP.NET Markup – Marcação do ASP.NET

Os controles de servidor ASP. NET, são utilizados nas páginas ASPX e controles de usuários ASCX. Estes controles podem ser utilizados mesclados com HTML, ou os substituindo completamente, mas possuem uma linguagem e elementos próprios para os representarem.

Seja utilizando um ambiente de desenvolvimento integrado como o Visual Web developer 2008 Express Edition(http://aplicacoesweb.blogspot.com/2008/03/visual-web-developer-2008-express.html) para adicionar controles de forma visual, ou escrevendo código, o resultado do processamento do ASPX ou ASCX sempre geram para o navegador é HTML. A imagem 4, mostra sendo montado uma página ASPX de forma visual. O código 1, mostra o código gerado:



Imagem 4 - Montando uma página usando o VWD 2008

<%@ Page Language="C#" AutoEventWireup="true" CodeFile="Default.aspx.cs"
Inherits="_Default"
%> <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0

Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<html xmlns="http://www.w3.org/1999/xhtml">
<head runat="server">
<title>Untitled Page</title>
</head>
<body>
<form id="form1" runat="server">
<div>
<asp:Label ID="Label1" runat="server" Text="Página ASPX simples"></asp:Label>
<br /> <asp:Calendar ID="Calendar1" runat="server" BackColor="White"

BorderColor="White" BorderWidth="1px" Font-Names="Verdana" Font-Size="9pt"
ForeColor="Black" Height="190px" NextPrevFormat="FullMonth" Width="350px">
<SelectedDayStyle BackColor="#333399" ForeColor="White" /> <TodayDayStyle
BackColor="#CCCCCC" /> <OtherMonthDayStyle ForeColor="#999999" /> <NextPrevStyle
Font-Bold="True" Font-Size="8pt" ForeColor="#333333" VerticalAlign="Bottom" />
<DayHeaderStyle Font-Bold="True" Font-Size="8pt" /> <TitleStyle
BackColor="White" BorderColor="Black" BorderWidth="4px" Font-Bold="True"
Font-Size="12pt" ForeColor="#333399" /> </asp:Calendar>
<br />
</div>
</form>
</body>
</html>

Código 1: Exemplo de ASPX

Ao publicar esta página num servidor que processa ASP.NET e um navegador requisita-la, o resultado será o da imagem 5 e ao exibir o fonte no navegador, o resultado será conforme código 2:


Imagem 5 - Resultado do ASPX no navegador

<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN"
"http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<html

xmlns="http://www.w3.org/1999/xhtml">
<head>
<title>Untitled Page
</title>
</head>
<body>
<form name="form1" method="post" action="Default.aspx"

id="form1"> <div> <input type="hidden" name="__EVENTTARGET" id="__EVENTTARGET"
value="" />
<input type="hidden" name="__EVENTARGUMENT" id="__EVENTARGUMENT"

value="" />
<input type="hidden" name="__VIEWSTATE" id="__VIEWSTATE"

value="/wEPDwUKLTQxMzQzODU1NmRkqJRY4FgoQjKSxkHsKCdY/MvM0so=" />
</div>
<script

type="text/javascript">
//<![CDATA[
var theForm = document.forms['form1'];
if
(!theForm) { theForm = document.form1; }
function __doPostBack(eventTarget,
eventArgument) {
if (!theForm.onsubmit || (theForm.onsubmit() != false)) {

theForm.__EVENTTARGET.value = eventTarget; theForm.__EVENTARGUMENT.value =
eventArgument; theForm.submit(); }
}

//]]>
</script>
<div>
<span
id="Label1">Página ASPX simples</span> <br /> <table id="Calendar1" cellspacing="0" cellpadding="2" title="Calendar" border="0"
style="width:350px;height:190px;font-size:9pt;font-family:Verdana;color:Black;border-width:1px;border-style:solid;border-color:White;background-color:White;border-collapse:collapse;">

código 2 : Pedaço do HTML gerado.

Repare que apesar do código de marcação do ASPX, o código gerado para navegador continua sendo HTML.