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