Condividi tramite


Procedura: migrare una pagina Web ASP.NET 1.1 ad ASP.NET 2.0 utilizzando l'attributo CodeBehind

Aggiornamento: novembre 2007

In questo argomento viene illustrata la procedura per creare una pagina Web e un controllo utente che utilizzano l'attributo CodeBehind della direttiva @ Page, compilarli, quindi convertirli in modo che venga utilizzato l'attributo CodeFile con una classe parziale nei file code-behind in .NET Framework versione 2.0.

Il nuovo modello code-behind per le pagine Web di ASP.NET versione 2.0 si basa sulle classi parziali. Il markup della pagina è archiviato in un file, il file con estensione aspx, mentre il codice di programmazione è definito in una classe parziale, il file code-behind. Convertendo le pagine Web esistenti nel nuovo modello code-behind, si garantisce una maggiore separazione del markup della pagina e del codice di programmazione, in quanto non è necessario includere variabili di istanza o associazione esplicita degli eventi nella classe parziale.

Le pagine Web che utilizzano gli attributi CodeBehind e Inherits della direttiva @ Page funzionano in .NET Framework 2.0. È tuttavia necessario compilare i file code-behind e inserire l'assembly risultante nella cartella Bin.

Se si decide di migrare al modello code-behind di ASP.NET 2.0, è necessario modificare in modo coordinato il file con estensione aspx e il file code-behind. Nel file aspx è necessario sostituire l'attributo CodeBehind con l'attributo CodeFile. Nei file code-behind si utilizza una classe parziale. Il vantaggio di utilizzare il nuovo modello code-behind è rappresentato dal fatto che non è necessario compilare in modo esplicito i file code-behind, perché questa operazione viene eseguita automaticamente dal compilatore ASP.NET.

Inoltre, quando si utilizza il nuovo modello code-behind, è necessario aggiungere i riferimenti agli altri file code-behind mediante direttive @ Register.

Per accedere alla pagina Web creata con le procedure seguenti, è necessario creare una directory virtuale in Microsoft Internet Information Services (IIS). Per informazioni dettagliate su come creare una directory virtuale per IIS, vedere Procedura: creare e configurare directory virtuali in IIS 5.0 e 6.0.

Per compilare una pagina Web e un controllo utente utilizzando l'attributo CodeBehind

  1. Creare una pagina Web utilizzando l'attributo CodeBehind della direttiva @ Page, come illustrato nel precedente codice di esempio.

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

    Si noti che per il controllo Label dichiarato nella pagina aspx esiste una corrispondente dichiarazione nel file code-behind. Inoltre, la classe code-behind è una definizione di classe normale e non di classe parziale.

  2. Creare un controllo utente utilizzando l'attributo CodeBehind della direttiva @ Control, come illustrato nel precedente codice di esempio.

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

    Si noti che come per il file code-behind per la pagina Web, il file code-behind per il controllo utente utilizza una classe e non una classe parziale.

  3. Compilare la pagina Web e il controllo utente e inserire la libreria del codice nella cartella Bin dell'applicazione. Quando si utilizza l'attributo CodeBehind è necessario compilare tutte le classi code-behind in un'unica libreria del codice e inserire il file dll risultante nella cartella Bin. Per quanto riguarda l'esempio della pagina Web, l'istruzione che compila entrambi i file code-behind è:

    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. Richiedere la pagina Web CodeBehindExample.aspx in un browser per verificare che funzioni in .NET Framework 2.0.

Per convertire una pagina Web e un controllo utente nel modello code-behind di ASP.NET 2.0 utilizzando l'attributo CodeBehind

  1. Modificare il file aspx della pagina Web in base al codice di esempio riportato di seguito.

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

    Ora viene utilizzato un attributo CodeFile anziché un attributo CodeBehind nella direttiva @ Page del file aspx. Viene utilizzata una direttiva @ Reference per fare riferimento al controllo utente nella pagina code-behind.

  2. Modificare il file code-behind della pagina Web in base al codice di esempio riportato di seguito.

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

    Nel file code-behind viene utilizzata una classe parziale per definire l'ulteriore codifica per la pagina aspx. Ora non è necessario dichiarare il controllo Label utilizzato nella pagina aspx, a differenza di quanto avveniva per la precedente pagina code-behind basata sull'attributo CodeBehind.

  3. Modificare il file aspx del controllo utente in base al codice di esempio riportato di seguito.

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

    Come per la pagina Web, il controllo utente ora utilizza un attributo CodeFile anziché l'attributo CodeBehind.

  4. Modificare il file code-behind del controllo utente in base al codice di esempio riportato di seguito.

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

    Come per il file code-behind della pagina Web, ora il file code-behind del controllo utente utilizza una classe parziale.

  5. Eliminare il file CodeBehindExample.dll dalla cartella Bin creata nella procedura precedente.

    ASP.NET 2.0 compilerà la pagina, insieme ai relativi file code-behind, la prima volta che verrà richiesta.

  6. Richiedere la pagina Web CodeBehindExample.aspx e verificare che funzioni come prima.

Vedere anche

Concetti

Cenni preliminari sull'esecuzione affiancata di più versioni in ASP.NET

Altre risorse

Migrazione ad ASP.NET