Desenvolvimento - ASP. NET

ASP.NET - Trabalhando com o modelo de programação Code in Page usando WebMatrix

No artigo de hoje irei falar sobre um dos modelos de programação do ASP.NET – Code in Page.

por Renato Guimarães



De hoje em diante estarei contribuindo com artigos sobre a tecnologia que revolucionou a forma de pensar quando você estiver criando suas aplicações web. Espero conseguir atingir as expectativas dos leitores e, conseqüentemente, estimular e contribuir com aqueles que estão mergulhando nessa tecnologia.

Um bom começo seria fazer uma boa introdução sobre a tecnologia e fazer algumas comparações com o seu antecessor – ASP.

Bem, vamos ao que interessa... No artigo de hoje irei falar sobre um dos modelos de programação do ASP.NET – Code in Page. Além do Code in Page temos o Code Behind. No Code Behind, para cada arquivo .aspx temos um arquivo .aspx.cs(C#) ou aspx.vb(VB.NET). A grande vantagem do Code Behind é a verdadeira separação do HTML e código de forma mais fácil e legível e, conseqüentemente, você conseguirá reutilizar e manter seu código numa boa. No modelo Code Behind seu código ficará bem semelhante ao estilo de programação utilizado no ASP clássico. A principal diferença é que agora você tem uma linguagem compilada, orientada a objetos e suportada pelo super ninja framewok .NET (agora lascou foi tudo... ASP.NET não tem o que reclamar J). Vou mostrar as principais tags utilizadas para aplicar alguns dos conceitos de orientação a objetos. Para testar e construir os exemplos estarei utilizando o super big hiper ninja WebMatrix (é free e muito bom).

O nosso primeiro exemplo mostra uma página simples onde só tenho dois Server Controls – um TextBox e um Button.

Fig. 1 – IDE do WebMatrix exibindo a visão de Design de um Web Form, Toolbox, Properties e Workspace.

Na figura dá pra perceber o quanto o WebMatrix é bom. Você tem uma ferramenta RAD para construir suas páginas web de forma rápida e super fácil. Quando precisar adicionar ou alterar componentes use a visão de design. Além da visão de design, temos:

HTML – exibe somente o código HTML da página;

Code – exibe o código na sua linguagem preferida (C#, VB.NET ou J#). Todos eventos, funcções etc poderão ser vistos separados do HTML;

All – mostra todo seu código junto com HTML.

A figura 2 mostra o código HTML e C# juntos :

Fig. 2 – Visão do HTML do Web Form e o código C#. A grande vantagem é que você, mesmo misturando os códigos, tem um visão separada dos códigos.

Já vimos o quanto o webmatrix pode nos ajudar. Agora vamos dar uma analisada no código que está dentro do webform.

<%@ Page Language=”C#” %> - Essa é uma diretiva de compilação onde estamos informando qual a linguagem que iremos escrever o código que executa no servidor(existem outros atributos além do language).

<script runat=”Server”> </script> - Essa é a parte de implementação do código que será executado no servidor. Cuidado pra não confundir com a tag que usamos pra definir código em Jscript - <script language=”javascript”> </script>. Aqui é onde ficarão seus métodos e eventos dos Server Controls.

Quando o ASP.NET receber uma requisição para essa página será feita a compilação(só a primeira requisição) e todo código dentro dessa área será colocado dentro de uma classe e, em seguida, gerado uma dll.

Agora vamos falar sobre os elementos Implements, Import e Reference. Quando estiver construindo suas páginas web terá a necessidade de fazer reutilizar alguma classe, implementar alguma interface ou carregar algum controle dinamicamente. Abaixo estarei falando sobre cada um.

<%@ Implements interface="NomeDaInterface" %> -

Indica que o webform ou user control implementará a interface informada em NomeDaInterface. Sendo assim, dentro do bloco <script runat=”Server”> você terá que implementar os métodos da interface. A interface te dá oportunidade de ter várias implementações de um mesmo método.

Quando estiver implementando um interface num Web Form você pode declarar eventos, métodos, e propriedades entre a tag <script runat=”server”>. Você não pode usar essa diretiva para implementar uma interface no modelo code behind. Para mostrar através de um exemplo vou criar uma interface e, em seguida irei implementá-la dentro do meu aspx.

Exemplo:

using System;

namespace Sessao{
      public interface IProcessamento{
            void SalvarPagina();
            void CancelarPagina();
      }
}

Código dento do Aspx

<%@ Implements Interface="Sessao.IProcessamento" %>
 
<script language="C#" runat="server">
 
  //Dentro desse bloco temos que ter a implementação dos dois métodos  
  public void SalvarPagina(){
    // faz alguma coisa  
  }
 
  public void CancelarPagina(){
    // faz alguma coisa  
  }
</script>

<%@ Import namespace="NomeDoNamespace" %> - Explicitamente importa o namespace para que você possa fazer referência a todas as classes e interfaces do namespace. Pode ser qualquer namespace do framework .NET ou algum que você tenha implementado. Essa diretiva não pode ter mais de um atributo namespace. Para importar vários namespaces, use a diretiva import várias vezes. Alguns namespaces já são importados por default:

  • System
  • System.Collections
  • System.Collections.Specialized
  • System.Configuration
  • System.IO
  • System.Text
  • System.Text.RegularExpressions
  • System.Web
  • System.Web.Caching
  • System.Web.Security
  • System.Web.SessionState
  • System.Web.UI
  • System.Web.UI.HtmlControls
  • System.Web.UI.WebControls

Exemplo:

<%@ Import Namespace="System.Net" %>
<%@ Import Namespace="Sessao" %>

<%@ Reference page ou control="CaminhoArquivo" %> - Declarativamente indica que outro User Control ou aspx deve ser compilado e linkado com o webform onde está diretiva está declarada.

page – Web Form que o ASP.NET deve dinamicamente compilar e linkar a página corrente em runtime.

control – User Control que o ASP.NET deve dinamicamente compilar e linkar a página corrente em runtime.

Esta diretiva permite você dinamicamente compilar um user control e adicioná-lo a um objeto ControlCollection. O objeto ControlCollection é acessado através da propriedade Controls, seja para um web form ou Server Control. Através do método LoadControl será carregado o controle e, em seguida, terá que ser feito um cast para a classe do componente que se deseja.

Exemplo:

O exemplo mostra a utilização desta diretiva para linkar um user control, MyControl.ascx, e carregá-lo num container (PlaceHolder ou Panel) que está dentro do WebForm usando o método LoadControl. Assim que carregarmos o controle, mudaremos a propriedade Value e, em seguida, usando o método Add, iremos adicionar o componente ao PlaceHolder. OBS: Para carregar um componente dinamicamente você tem que usar um container. Os componentes container são PlaceHolder e Panel.

<%@ Reference Control="MyControl.ascx" %>
<script language="C#" runat=server>
 
    void Page_Load(Object sender, EventArgs e) {
        
        // Na diretiva  @Control no MyControl.ascx file, 
		// você deve incluir o atributo classname="MyControl" para 
		// conseguir fazer o cast após ter carregado o controle.
        MyControl myControl = (MyControl) Page.LoadControl("MyControl.ascx");
        myControl.Value = "teste";
 
        //Carregando o controle dentro do container
        PlaceHolder.Controls.Add(myControl);
    }
</script>
 
<html>
     <body>
      <asp:placeholder id="PlaceHolder" runat="server"/>
   </body>
</html>

Podemos ver que dá pra separar boa parte do seu código usando o modelo Code in Page e deixá-lo fácil de manter e reutilizar. Além disso, também vimos a facilidade que é carregar um user control dinamicamente usando a diretiva <%@ reference %>.

Qualquer dúvida, crítica, sugestão para outros artigos etc pode entrar em contato comigo através por email(cezar@cesar.org.br, renato.guimaraes@sharpshooters.org.br) ou Messenger(renatokbca@msn.com). Obrigado pela paciência e atenção. Espero você no próximo artigo.

Renato Guimarães

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