Freigeben über


Gewusst wie: Migrieren einer ASP.NET 1.1-Webseite mit dem CodeBehind-Attribut zu ASP.NET 2.0

Aktualisiert: November 2007

In diesem Thema wird veranschaulicht, wie Sie eine Webseite und ein Benutzersteuerelement erstellen, die das CodeBehind-Attribut der @ Page-Direktive verwenden, wie sie sie kompilieren und anschließend so konvertieren, dass sie das CodeFile-Attribut mit einer Teilklasse in den Code-Behind-Dateien in .NET Framework, Version 2.0, verwenden.

Das neue Code-Behind-Modell für Webseiten in ASP.NET, Version 2.0, beruht auf Teilklassen. Das Markup für die Seite wird in einer Datei, der ASPX-Datei, gespeichert, und der Code wird in einer Teilklasse, der Code-Behind-Datei, definiert. Das Konvertieren vorhandener Webseiten in das neue Code-Behind-Modell ermöglicht eine noch stärkere Trennung von Markup und Code, da Sie keine Instanzvariablen oder explizite Ereignisbindung in die Teilklassen einfügen müssen.

Webseiten, für die das CodeBehind-Attribut und das Inherits-Attribut der @ Page-Direktive verwendet wird, werden auch in .NET Framework 2.0 ausgeführt. Sie müssen jedoch Code-Behind-Dateien kompilieren und die resultierende Assembly im Ordner Bin ablegen.

Wenn Sie eine Migration zum Code-Behind-Modell von ASP.NET 2.0 ausführen, müssen Sie koordinierte Änderungen an der ASPX-Datei und der Code-Behind-Datei vornehmen. In der ASPX-Datei ersetzen Sie das CodeBehind-Attribut durch das CodeFile-Attribut. In den Code-Behind-Dateien verwenden Sie eine Teilklasse. Die Verwendung des neuen Code-Behind-Modells bietet den Vorteil, dass Sie die Code-Behind-Dateien nicht explizit kompilieren müssen, da dies durch den ASP.NET-Compiler automatisch erfolgt.

Zudem müssen bei Verwendung des neuen Code-Behind-Modells mithilfe von @ Register-Direktiven Verweise auf andere Code-Behind-Dateien hinzugefügt werden.

Um auf die in der folgenden Vorgehensweise erstellte Webseite zuzugreifen, müssen Sie in Microsoft Internet Informationsdienste (IIS) ein virtuelles Verzeichnis erstellen. Informationen über das Erstellen eines virtuellen Verzeichnisses für IIS finden Sie unter Gewusst wie: Erstellen und Konfigurieren von virtuellen Verzeichnissen in IIS 5.0 und 6.0.

So kompilieren Sie mit dem CodeBehind-Attribut eine Webseite und ein Benutzersteuerelement

  1. Erstellen Sie mit dem CodeBehind-Attribut der @ Page-Direktive eine Webseite, wie im folgenden Codebeispiel gezeigt.

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

    Beachten Sie, dass für das auf der ASPX-Seite deklarierte Label-Steuerelement eine entsprechende Deklaration in der Code-Behind-Datei vorhanden ist. Außerdem ist die Code-Behind-Klasse eine normale Klassendefinition und keine Teilklasse.

  2. Erstellen Sie mit dem CodeBehind-Attribut der @ Control-Direktive ein Benutzersteuerelement, wie im folgenden Codebeispiel gezeigt.

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

    Beachten Sie, dass für die Code-Behind-Datei des Benutzersteuerelements wie für die Code-Behind-Datei der Webseite eine Klasse und keine Teilklasse verwendet wird.

  3. Kompilieren Sie die Webseite und das Benutzersteuerelement, und legen Sie die Codebibliothek im Ordner Bin der Anwendung ab. Die Verwendung des CodeBehind-Attributs erfordert, dass Sie alle Code-Behind-Klassen in eine einzelne Codebibliothek kompilieren und die resultierende DLL-Datei in den Ordner Bin einfügen. Für die Beispiele zur Webseite und zum Benutzersteuerelement lautet die Kompilierungsanweisung zum Kompilieren beider Code-Behind-Dateien wie folgt:

    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. Fordern Sie die Webseite CodeBehindExample.aspx in einem Browser an, um zu überprüfen, ob sie in .NET Framework 2.0 ordnungsgemäß ausgeführt wird.

So konvertieren Sie eine Webseite und ein Benutzersteuerelement mit dem CodeBehind-Attribut in das Code-Behind-Modell von ASP.NET 2.0

  1. Ändern Sie die ASPX-Datei der Webseite, sodass sie mit dem folgenden Codebeispiel übereinstimmt.

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

    Jetzt wird in der @ Page-Direktive der ASPX-Datei anstelle eines CodeBehind-Attributs ein CodeFile-Attribut verwendet. Um auf das Benutzersteuerelement auf der Code-Behind-Seite zu verweisen, wird eine @ Reference-Direktive verwendet.

  2. Ändern Sie die Code-Behind-Datei der Webseiten, sodass sie mit dem folgenden Codebeispiel übereinstimmt.

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

    In der Code-Behind-Datei wird eine Teilklasse verwendet, um zusätzliche Codierung für die ASPX-Seite zu definieren. Im Gegensatz zu der vorherigen, auf dem CodeBehind-Attribut basierenden Code-Behind-Seite ist es jetzt nicht erforderlich, das auf der ASPX-Seite verwendete Label-Steuerelement zu deklarieren.

  3. Ändern Sie die ASPX-Datei des Benutzersteuerelements, sodass sie mit dem folgenden Codebeispiel übereinstimmt.

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

    Wie die Website verwendet jetzt das Benutzersteuerelement anstelle des CodeBehind-Attributs ein CodeFile-Attribut.

  4. Ändern Sie die Code-Behind-Datei des Benutzersteuerelements, sodass sie mit dem folgenden Codebeispiel übereinstimmt.

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

    Die Code-Behind-Datei des Benutzersteuerelements verwendet jetzt wie die Code-Behind-Datei der Webseite eine Teilklasse.

  5. Löschen Sie die Datei CodeBehindExample.dll aus dem Ordner Bin, der in der vorherigen Vorgehensweise erstellt wurde.

    ASP.NET 2.0 kompiliert die Seite bei der ersten Anforderung zusammen mit den Code-Behind-Dateien.

  6. Fordern Sie die Webseite CodeBehindExample.aspx an, und überprüfen Sie, ob sie wie zuvor ausgeführt wird.

Siehe auch

Konzepte

Übersicht über die parallele Ausführung in ASP.NET

Weitere Ressourcen

Migrieren zu ASP.NET