Modelo de código de página Web do ASP.NET

Um página da Web do ASP.NET consiste em duas partes:

  • Elementos visuais, que incluem marcação, os controles do servidor, e texto estático.

  • Programação lógica para a página, que inclui manipuladores de eventos e outros códigos.

O ASP.NET fornece dois modelos de gerenciamento dos elementos visuais e do código — o modelo de página de arquivo único e o modelo de página code-behind.Os dois modelos funcionam da mesma forma, e você pode usar os mesmos controles e código para ambos os modelos.

Este tópico explica como cada modelo funciona e oferece sugestões para quando escolher um modelo ou a outro.

O modelo de página de arquivo único

No modelo de página de arquivo único, a marcação da página e do seu código de programação estão fisicamente no mesmo arquivo .aspx.O código de programação é em um bloco script que contém o atributo para marcá-lo como código ASP.NET que deve ser executado.

O exemplo de código a seguirmostra uma página de arquivo único contendo um controle Button e outro controle Label.A porção realçada exibe o manipulador de eventos Click para o controle Button dentro de um bloco script.

<%@ Page Language="VB" %>
<script >
    Protected Sub Button1_Click(ByVal sender As Object, _            ByVal e As System.EventArgs)        Label1.Text = "Clicked at " & DateTime.Now.ToString()    End Sub
</script>

<html>
<head id="Head1" >
  <title>Single-File Page Model</title>
</head>
<body>
  <form id="form1" >
    <div>
      <asp:Label ID="Label1" 
         Text="Label">
      </asp:Label>
      <asp:Button ID="Button1" 
          OnClick="Button1_Click" Text="Button">
      </asp:Button>
    </div>
  </form>
</body>
</html>
<%@ Page Language="C#" %>
<script >
void Button1_Click(Object sender, EventArgs e){    Label1.Text = "Clicked at " + DateTime.Now.ToString();}
</script>
<html>
<head>
  <title>Single-File Page Model</title>
</head>
<body>
  <form >
    <div>
       <asp:Label id="Label1" 
          Text="Label">
       </asp:Label>
       <br />
       <asp:Button id="Button1" 
          
         onclick="Button1_Click" 
         Text="Button">
      </asp:Button>
    </div>
  </form>
</body>
</html>

The scriptbloco pode conter a quantidade de código conforme a página requer. O código pode consistir de manipuladores de eventos para controle da página (como no exemplo), métodos, propriedades, e algum outro código que você use normalmente em um arquivo de classe.Em tempo de execução, uma página de arquivo único é tratada como uma classe que deriva da classe Page.A página não contém uma declaração explícita de classe.Ao invés disso, o compilador gera uma uma nova classe que contém os controles como membros.(Nem todos os controles são expostos como membros da página; alguns são filhos de outros controles.) O código na página torna-se parte da classe; por exemplo, manipuladores de eventos que você cria tornam-se membros derivados da classe Page.

Para obter mais informações, consulte Visão geral sobre classes de páginas ASP.NET.

O modelo de página code-Behind

O modelo de página code-behind permite-lhe manter a marcação em um arquivo — o arquivo .aspx - e o código de programação em outro arquivo.O nome do arquivo código varia acordo com a linguagem de programação que você está usando.

Observação:

Nem todas as linguagens de programação .NET permitem que você cria arquivos code-behind para páginas Web ASP.NET.Linguagens devem suportar classes parciais.Por exemplo, J# não suporta linguagens parciais, e portanto não suporta a criação de arquivos code-behind para páginas ASP.NET.

Por exemplo, se você estiver trabalhando com uma página chamada SamplePage, a marcação está no arquivo SamplePage.aspx e o código é em um arquivo denominado SamplePage.aspx.vb (para Visual Basic), SamplePage.aspx.cs (para C#), e assim por diante.

Observação:

O modelo code-behind usado no .NET Framework versão 2.0 é diferente daquele usado em versões anteriores.

No modelo code-behind, o exemplo usado na seção anterior para a página de arquivo único seria em duas partes.A marcação seria em um arquivo (no exemplo, SamplePage.aspx) e deve ser semelhante para a página de arquivo único, como mostrado no exemplo de código a seguir.

<%@ Page Language="VB" CodeFile="SamplePage.aspx.vb" 
    Inherits="SamplePage" AutoEventWire="false" %>
<html>
<head  >
   <title>Code-Behind Page Model</title>
</head>
<body>
  <form id="form1" >
    <div>
       <asp:Label id="Label1" 
          Text="Label" >
      </asp:Label>
      <br />
      <asp:Button id="Button1" 
          
         onclick="Button1_Click" 
         Text="Button" >
       </asp:Button>
    </div>
  </form>
</body>
</html>
<%@ Page Language="C#" CodeFile="SamplePage.aspx.cs" 
    Inherits="SamplePage" AutoEventWireup="true" %>
<html>
<head  >
   <title>Code-Behind Page Model</title>
</head>
<body>
  <form id="form1" >
    <div>
       <asp:Label id="Label1" 
          Text="Label" >
      </asp:Label>
      <br />
      <asp:Button id="Button1" 
          
         onclick="Button1_Click" 
         Text="Button" >
       </asp:Button>
    </div>
  </form>
</body>
</html>

Existem duas diferenças na página .aspx entre o arquivo único e os modelos code-behind.No modelo code-behind, não há nenhum bloco scriptcom o atributo .(A página pode conter blocos script sem o atributo se você deseja gravar o script do lado do cliente na página.) Segundo a diferença é que a diretiva @ Page no modelo code-behind contém atributos que consultam um arquivo externo (SamplePage.aspx.vb ou SamplePage.aspx.cs) e uma classe.Esses atributos vinculam a página.aspx a seu código.

O código está em um arquivo separado.O exemplo de código a seguir mostra um arquivo code-behind que contém o mesmo manipulador de eventos Click que o exemplo para a página de arquivo único.

Partial Class SamplePage
    Inherits System.Web.UI.Page
    Protected Sub Button1_Click(ByVal sender As Object, _
            ByVal e As System.EventArgs) Handles Button1.Click
        Label1.Text = "Clicked at " & DateTime.Now.ToString()
    End Sub
End Class
using System;
using System.Web;
using System.Web.UI;
using System.Web.UI.WebControls;
public partial class SamplePage : System.Web.UI.Page
{
    protected void Button1_Click(object sender, EventArgs e)
    {
        Label1.Text = "Clicked at " + DateTime.Now.ToString();
    }
}

O arquivo code-behind contém as declarações completas de classe no namespace padrão.Entretanto, a classe é declarada com a palavra-chave partial, que indica que a classe não está contida totalmente em um arquivo.Instead, when the page runs, the compiler reads the .aspx page and the file it references in the @ Page directive, assembles them into a single class, and then compiles them as a unit into a single class.

O arquivo de classe parcial herda da classe de página Page.Para obter mais informações, consulte Visão geral sobre classes de páginas ASP.NET.

Escolhendo um modelo de página

Os modelos de página de arquivo único e code-behind são funcionalmente os mesmos.Em tempo de execução, os modelos são executados da mesma maneira, e não existe nenhuma diferença desempenho entre eles.Portanto escolher um modelo página depende de outros fatores, como como você deseja organizar o código em seu aplicativo, se é importante separar o design da página da codificação, e assim por diante.

Observação:

Frequentemente os exemplos que você ler na documentação são apresentados como páginas de arquivo único.Isso ocorre principalmente como uma conveniência para o leitor, para evitar ter que ilustrar dois arquivos para cada exemplo.O fato de você encontrar exemplos de arquivo único na documentação não deve ser interpretado que páginas de arquivo único são favorecidas sobre páginas code-behind ou que existam algumas outra vantagem inerente para páginas de arquivo único.

Vantagens de páginas de arquivo único

Como regra, o modelo de arquivo único é adequado para páginas em que o código consiste basicamente de manipuladores de eventos para os controles na página.

Vantagens do modelo de página de arquivo único incluem o seguinte:

  • Nas páginas onde não há grande quantidade de código, a conveniência de manter o código e a marcação no mesmo arquivo pode pesar sobre as outras vantagens do modelo code-behind.Por exemplo, pode ser mais fácil para estudar uma página de arquivo único porque você pode ver o código e a marcação num único local.

  • Páginas escritas usando o modelo de arquivo único são um pouco mais fáceis para implantar ou para enviar para outro programador porque há somente um arquivo.

  • Como não há nenhuma dependência entre arquivos, uma página de arquivo único é mais fácil para renomear.

  • Gerenciando arquivos em um sistema de controle de código fonte é ligeiramente mais fácil, porque a página é independente em um único arquivo.

Vantagens de páginas code-behind

As páginas code-behind oferecem a vantagem de ser adequadas para aplicativos da Web com código significativo ou no qual vários desenvolvedores irão criar um site da Web.

Vantagens do modelo code-behind incluem o seguinte:

  • As páginas code-behind oferecem uma separação limpa de marcação (interface do usuário) e do código.Ela é prática para que um designer trabalhe na marcação enquanto um programador escreve o código.

  • O código não é exposto aos designers da página ou há outras pessoas que trabalham somente com a marcação de página.

  • O código pode ser reutilizado para várias páginas.

Compilação e implantação

A compilação e implantação de páginas de arquivo único e code-behind são semelhantes.Em sua forma mais simples, você copia a página para o servidor de destino.Se você estiver trabalhando com páginas code-behind, você copia a página .aspx e o arquivo com o código.Quando a página for pela primeira vez solicitada, o ASP.NET compila a página e a executa.Observe que em ambos os cenários você implanta a código fonte com a marcação.

Como alternativa, você pode pré-compilar seu site da Web.Nesse caso, ASP.NET produz o código do objeto para as páginas que você pode copiar para o servidor de destino.A pré-compilação funciona para os modelos de arquivo único e code-behind, e a saída é a mesma para ambos os modelos.Para obter mais informações, consulte ASP.NET Precompilation Overview.

Consulte também

Conceitos

Visão Geral do Ciclo de Vida da Página ASP.NET

Visão geral da Compilação do ASP.NET