Cómo: Migrar a ASP.NET 2.0 una página web de ASP.NET 1.1 mediante el atributo CodeBehind

Actualización: noviembre 2007

En este tema se muestra cómo crear una página Web y un control de usuario que utilicen el atributo CodeBehind de la directiva @ Page, cómo compilarlos y, a continuación, cómo convertirlos para que se utilice el atributo CodeFile con una clase parcial en los archivos de código subyacente de .NET Framework 2.0.

El nuevo modelo de código subyacente de páginas Web de la versión 2.0 de ASP.NET se basa en clases parciales. El marcado de la página se almacena en un solo archivo, el archivo .aspx, y el código se define en una clase parcial, el archivo de código subyacente. La conversión de las páginas Web existentes al nuevo modelo de código subyacente permite una separación aún mayor entre el marcado y el código porque no hay que incluir variables de instancia ni enlaces de eventos explícitos en la clase parcial.

Las páginas Web que utilicen los atributos CodeBehind e Inherits de la directiva @ Page seguirán funcionando en .NET Framework 2.0. Sin embargo, es preciso compilar los archivos de código subyacente y colocar el ensamblado resultante en la carpeta Bin.

Si decide migrar al modelo de código subyacente de ASP.NET 2.0, deberá realizar cambios coordinados en el archivo .aspx y el archivo de código subyacente. En el archivo .aspx, deberá reemplazar el atributo CodeBehind con el atributo CodeFile. En los archivos de código subyacente, deberá utilizar una clase parcial. El nuevo modelo de código subyacente tiene como ventaja que no hay que compilar explícitamente los archivos de código subyacente porque de eso se encargará automáticamente el compilador de ASP.NET.

Además, cuando se utiliza el nuevo modelo de código subyacente, hay que agregar referencias a otros archivos de código subyacente mediante las directivas @ Register.

Para obtener acceso a la página Web creada en los procedimientos que figuran más adelante, deberá crear un directorio virtual en Internet Information Services (IIS). Para obtener información detallada sobre cómo crear un directorio virtual en IIS, vea Cómo: Crear y configurar directorios virtuales en IIS 5.0 y 6.0.

Para compilar una página Web y un control de usuario mediante el atributo CodeBehind

  1. Cree una página Web mediante el atributo CodeBehind de la directiva @ Page, tal como se muestra en el ejemplo de código siguiente.

    <%@ Page Language="VB" AutoEventWireup="true" 
        CodeBehind="CodeBehindExample.aspx.vb" 
        Inherits="CodeBehindExample" %>
    
    <!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>Code-Behind Using the CodeBehind Attribute</title>
    </head>
    <body>
        <form id="form1" >
        <div>
          <asp:Label id="Label1" ></asp:Label>    
        </div>
        </form>
    </body>
    </html>
    
    <%@ Page Language="C#" AutoEventWireup="true" 
        CodeBehind="CodeBehindExample.aspx.cs" 
        Inherits="CodeBehindExample" %>
    
    <!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>Code-Behind Example</title>
    </head>
    <body>
        <form id="form1" >
        <div>
          <asp:Label id="Label1" ></asp:Label>    
        </div>
        </form>
    </body>
    </html>
    
    Public Class CodeBehindExample
        Inherits System.Web.UI.Page
    
        Protected Label1 As System.Web.UI.WebControls.Label
    
        Protected Sub Page_Load(ByVal sender As Object, _
        ByVal e As System.EventArgs) Handles Me.Load
    
            Dim uc As CodeBehindExampleUserControl = _
            CType(LoadControl("~/CodeBehindExampleUserControl.ascx"), _
            CodeBehindExampleUserControl)
            Label1.Text = CType(uc.FindControl("Label2"), _
            System.Web.UI.WebControls.Label).Text
    
        End Sub
    
    End Class
    
    public class CodeBehindExample : 
        System.Web.UI.Page
    {
        protected System.Web.UI.WebControls.Label Label1;
    
        protected void Page_Load(object sender, 
            System.EventArgs e)
        {
            CodeBehindExampleUserControl uc =
              (CodeBehindExampleUserControl)LoadControl
              ("~/CodeBehindExampleUserControl.ascx");
            Label1.Text = ((System.Web.UI.WebControls.Label)
                uc.FindControl("Label2")).Text;
    
        }
    }
    

    Observe que para el control Label declarado en la página .aspx, hay una declaración correspondiente en el archivo de código subyacente. Asimismo, la clase de código subyacente es una definición de clase normal y no una clase parcial.

  2. Cree un control de usuario mediante el atributo CodeBehind de la directiva @ Control, tal como se muestra en el ejemplo de código siguiente.

    <%@ Control Language="VB" AutoEventWireup="false" 
        CodeBehind="CodeBehindExampleUserControl.ascx.vb" 
        Inherits="CodeBehindExampleUserControl" %>
    <asp:Label id="Label2" >
    Label text in user control.
    </asp:Label>
    
    <%@ Control Language="C#" AutoEventWireup="false" 
        CodeBehind="CodeBehindExampleUserControl.ascx.cs" 
        Inherits="CodeBehindExampleUserControl" %>
    <asp:Label id="Label2" >
    Label text in user control.
    </asp:Label>
    
    Public Class CodeBehindExampleUserControl
        Inherits System.Web.UI.UserControl
    
        Protected Sub Page_Load(ByVal sender As Object, _
        ByVal e As System.EventArgs) Handles Me.Load
            ' User control code.
        End Sub
    
    End Class
    
    public class CodeBehindExampleUserControl : 
        System.Web.UI.UserControl
    {
        protected void Page_Load(object sender, 
            System.EventArgs e)
        {
            // User control code.
        }
    }
    

    Al igual que en el caso del archivo de código subyacente de la página Web, el archivo de código subyacente del control de usuario utiliza una clase en lugar de una clase parcial.

  3. Compile la página Web y el control de usuario. A continuación, coloque la biblioteca de códigos en la carpeta Bin de la aplicación. El uso del atributo CodeBehind requiere la compilación de todas las clases de código subyacente en una sola biblioteca de códigos y la colocación del archivo .dll resultante en la carpeta Bin. En el ejemplo de la página Web y del control de usuario, la instrucción que compila ambos archivos de código subyacente es:

    vbc /target:library /nologo /out:bin\CodeBehindExample.dll /r:System.dll,System.Web.dll CodeBehindExample.aspx.vb CodeBehindExampleUserControl.ascx.vb
    
    csc /target:library /nologo /out:bin\CodeBehindExample.dll CodeBehindExample.aspx.cs CodeBehindExampleUserControl.ascx.cs
    
  4. Solicite el archivo CodeBehindExample.aspx de la página Web en un explorador para comprobar que funciona en .NET Framework 2.0.

Para convertir una página Web y un control de usuario mediante el atributo CodeBehind al modelo de código subyacente de ASP.NET 2.0

  1. Cambie el archivo .aspx de la página Web de modo que coincida con el siguiente ejemplo de código.

    <%@ Reference Control="~/CodeBehindExampleUserControl.ascx" %>
    <%@ Page Language="VB" AutoEventWireup="false" 
        CodeFile="CodeBehindExample.aspx.vb" 
        Inherits="CodeBehindExample" %>
    
    <!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>Code-Behind Example</title>
    </head>
    <body>
        <form id="form1" >
        <div>
          <asp:Label id="Label1" ></asp:Label>        
        </div>
        </form>
    </body>
    </html>
    
    <%@ Reference Control="~/CodeBehindExampleUserControl.ascx" %>
    <%@ Page Language="C#" AutoEventWireup="true"  
        CodeFile="CodeBehindExample.aspx.cs" 
        Inherits="CodeBehindExample" %>
    
    <!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>Code-Behind Example</title>
    </head>
    <body>
        <form id="form1" >
        <div>
          <asp:Label id="Label1" ></asp:Label>
        </div>
        </form>
    </body>
    </html>
    

    Ahora, se utiliza un atributo CodeFile en lugar de un atributo CodeBehind en la directiva @ Page del archivo .aspx. Se utiliza una directiva @ Reference para hacer referencia al control de usuario en la página de código subyacente.

  2. Cambie el archivo de código subyacente de las páginas Web de modo que coincida con el siguiente ejemplo de código.

    Partial Class CodeBehindExample
        Inherits System.Web.UI.Page
    
    
        Protected Sub Page_Load(ByVal sender As Object, _
        ByVal e As System.EventArgs) Handles Me.Load
    
            Dim uc As CodeBehindExampleUserControl = _
            CType(LoadControl("~/CodeBehindExampleUserControl.ascx"), _
            CodeBehindExampleUserControl)
            Label1.Text = CType(uc.FindControl("Label2"), _
            System.Web.UI.WebControls.Label).Text
    
        End Sub
    End Class
    
    public partial class CodeBehindExample : 
        System.Web.UI.Page 
    {
        protected void Page_Load(object sender, 
            System.EventArgs e)
        {
            CodeBehindExampleUserControl uc =
                (CodeBehindExampleUserControl)LoadControl
                ("~/CodeBehindExampleUserControl.ascx");
            Label1.Text = ((System.Web.UI.WebControls.Label)
                uc.FindControl("Label2")).Text;
    
        }
    }
    

    En el archivo de código subyacente, se utiliza una clase parcial para definir codificación adicional para la página .aspx. A diferencia de la anterior página de código subyacente basada en el atributo CodeBehind, no es preciso declarar el control Label utilizado en la página .aspx.

  3. Cambie el archivo .aspx del control de usuario de modo que coincida con el siguiente ejemplo de código.

    <%@ Control Language="VB" AutoEventWireup="false" 
        CodeFile="CodeBehindExampleUserControl.ascx.vb" 
        Inherits="CodeBehindExampleUserControl" %>
    <asp:Label id="Label2" >
    Label text in user control.
    </asp:Label>
    
    <%@ Control Language="C#" AutoEventWireup="true" 
        CodeFile="CodeBehindExampleUserControl.ascx.cs" 
        Inherits="CodeBehindExampleUserControl" %>
    <asp:Label id="Label2" >
    Label text in user control.
    </asp:Label>
    

    Al igual que la página Web, el control de usuario utiliza ahora un atributo CodeFile en lugar del atributo CodeBehind.

  4. Cambie el archivo de código subyacente del control de usuario de modo que coincida con el ejemplo de código siguiente.

    Partial Class CodeBehindExampleUserControl
        Inherits System.Web.UI.UserControl
    
        Protected Sub Page_Load(ByVal sender As Object, _
        ByVal e As System.EventArgs) Handles Me.Load
            ' User control code.
        End Sub
    End Class
    
    public partial class CodeBehindExampleUserControl : 
        System.Web.UI.UserControl
    {
        protected void Page_Load(object sender, 
            System.EventArgs e)
        {
            // User control code.
        }
    }
    

    Al igual que el archivo de código subyacente de la página Web, el archivo de código subyacente del control de usuario utiliza ahora una clase parcial.

  5. Elimine el archivo CodeBehindExample.dll de la carpeta Bin creada en el procedimiento anterior.

    ASP.NET 2.0 compilará la página tras la primera solicitud junto con sus archivos de código subyacente.

  6. Solicite el archivo CodeBehindExample.aspx de la página Web y compruebe que funciona como antes.

Vea también

Conceptos

Información general sobre simultaneidad de ASP.NET

Otros recursos

Migrar a ASP.NET