Partager via


Comment : migrer une page Web ASP.NET 1.1 à l'aide de l'attribut CodeBehind vers ASP.NET 2.0

Mise à jour : novembre 2007

Cette rubrique montre comment créer une page Web et un contrôle utilisateur qui utilisent l'attribut CodeBehind de la directive @ Page, les compiler, puis les convertir pour utiliser l'attribut CodeFile avec une classe partielle dans les fichiers code-behind du .NET Framework version 2.0.

Le nouveau modèle code-behind de la page Web dans ASP.NET version 2.0 repose sur les classes partielles. Le balisage de la page est stocké dans un fichier (fichier .aspx) tandis que le code est défini dans une classe partielle (fichier code-behind). La conversion de vos pages Web existantes vers le nouveau modèle code-behind permet une séparation encore plus nette entre le balisage et le code parce que vous n'êtes pas obligé d'inclure des variables d'instance ou une liaison d'événements explicite dans la classe partielle.

Les pages Web utilisant les attributs CodeBehind et Inherits de la directive @ Page pourront toujours être utilisées dans le .NET Framework 2.0. Toutefois, vous devez compiler les fichiers code-behind et placer l'assembly résultant dans le dossier Bin.

Si vous choisissez de migrer vers le modèle code-behind d'ASP.NET 2.0, vous devez apporter des modifications coordonnées à vos fichiers .aspx et code-behind. Dans votre fichier .aspx, vous remplacez l'attribut CodeBehind par l'attribut CodeFile. Dans vos fichiers code-behind, vous utilisez une classe partielle. L'avantage de l'utilisation du nouveau modèle code-behind est que vous n'êtes pas obligé de compiler explicitement les fichiers code-behind parce que le compilateur ASP.NET le fera automatiquement.

En outre, lors de l'utilisation du nouveau modèle code-behind, les références à d'autres fichiers code-behind doivent être ajoutées à l'aide des directives @ Register.

Pour accéder à la page Web créée dans les procédures ci-dessous, vous devez créer un répertoire virtuel dans Microsoft Internet Information Services (IIS). Pour plus d'informations sur la création d'un répertoire virtuel pour IIS, consultez Comment : créer et configurer des répertoires virtuels dans IIS 5.0 et 6.0.

Pour compiler une page Web et un contrôle utilisateur à l'aide de l'attribut CodeBehind

  1. Créez une page Web à l'aide de l'attribut CodeBehind de la directive @ Page, comme décrit dans l'exemple de code suivant.

    <%@ 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;
    
        }
    }
    

    Notez que pour le contrôle Label déclaré sur la page .aspx, il existe une déclaration correspondante dans le fichier code-behind. En outre, la classe code-behind est une définition de classe normale et non une classe partielle.

  2. Créez un contrôle utilisateur à l'aide de l'attribut CodeBehind de la directive @ Control, comme décrit dans l'exemple de code suivant.

    <%@ 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.
        }
    }
    

    Notez que, à l'instar du fichier code-behind de la page Web, le fichier code-behind du contrôle utilisateur utilise une classe et non une classe partielle.

  3. Compilez la page Web et le contrôle utilisateur et placez la bibliothèque de code dans le dossier Bin de votre application. L'utilisation de l'attribut CodeBehind requiert que vous compiliez toutes les classes code-behind dans une seule bibliothèque de code et placiez le fichier .dll résultant dans le dossier Bin. Pour l'exemple de la page Web et du contrôle utilisateur, l'instruction de compilation qui compile les deux fichiers code-behind est la suivante :

    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. Demandez la page Web CodeBehindExample.aspx dans un navigateur pour vérifier qu'elle fonctionne dans le .NET Framework 2.0.

Pour convertir une page Web et un contrôle utilisateur à l'aide de l'attribut CodeBehind vers le modèle code-behind ASP.NET 2.0

  1. Modifiez le fichier .aspx de la page Web pour qu'il corresponde à l'exemple de code suivant.

    <%@ 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>
    

    Un attribut CodeFile est désormais utilisé à la place d'un attribut CodeBehind dans la directive @ Page du fichier .aspx. Une directive @ Reference est utilisée pour référencer le contrôle utilisateur dans la page code-behind.

  2. Modifiez le fichier code-behind de vos pages Web pour qu'il corresponde à l'exemple de code suivant.

    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;
    
        }
    }
    

    Dans le fichier code-behind, une classe partielle sert à définir le codage supplémentaire de la page .aspx. Il est désormais inutile de déclarer le contrôle Label utilisé sur la page .aspx, comme c'était le cas avec la page code-behind précédente basée sur l'attribut CodeBehind.

  3. Modifiez le fichier .aspx de votre contrôle utilisateur pour qu'il corresponde à l'exemple de code suivant.

    <%@ 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>
    

    Comme la page Web, le contrôle utilisateur utilise désormais un attribut CodeFile plutôt que l'attribut CodeBehind.

  4. Modifiez le fichier code-behind de votre contrôle utilisateur pour qu'il corresponde à l'exemple de code suivant.

    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.
        }
    }
    

    Comme le fichier code-behind de la page Web, le fichier code-behind du contrôle utilisateur utilise désormais une classe partielle.

  5. Supprimez du dossier Bin le fichier CodeBehindExample.dll qui a été créé lors de la procédure précédente.

    ASP.NET 2.0 compile votre page avec ses fichiers code-behind à la première demande.

  6. Demandez la page Web CodeBehindExample.aspx et vérifiez qu'elle fonctionne comme avant.

Voir aussi

Concepts

Vue d'ensemble de l'exécution côte à côte dans ASP.NET

Autres ressources

Migration vers ASP.NET