Verwenden von Visual C# .NET zum Arbeiten mit CodeBehind-Klassendateien in einer ASP.NET-Anwendung
In diesem Artikel wird beschrieben, wie Sie ASPX-Seiten entwickeln, die CodeBehind-Klassendateien in Microsoft ASP.NET Anwendungen verwenden. Die Codebeispiele in diesem Artikel enthalten die Anforderungen für vorkompilierte CodeBehind-Klassendateien und CodeBehind-Klassendateien, die bei Bedarf kompiliert werden.
Ursprüngliche Produktversion: ASP.NET
Ursprüngliche KB-Nummer: 308143
Anforderungen
In der folgenden Liste sind die empfohlenen Hardware-, Software- und Netzwerkinfrastrukturen aufgeführt, die Sie benötigen:
- Windows
- .NET Framework
- Internetinformationsdienste (IIS)
Erstellen einer ASP.NET Webanwendung mit Visual C# .NET
In diesem Abschnitt wird veranschaulicht, wie Sie eine neue ASP.NET Webanwendung mit dem Namen CodeBehindSamples erstellen.
- Starten Sie Visual Studio .NET.
- Zeigen Sie im Menü Datei auf Neu, und klicken Sie dann auf Projekt.
- Klicken Sie unter Project Typ auf Visual C#-Projekte. Klicken Sie unter Vorlagen auf ASP.NET Webanwendung.
- Geben Sie im Feld Name CodeBehindSamples ein. Geben Sie im Feld "Speicherort" den Servernamen ein. Wenn Sie den lokalen Server verwenden, behalten Sie den Speicherort
http://localhostbei.
Verwenden von CodeBehind-Klassendateien
Wenn Sie CodeBehind-Klassendateien mit ASPX-Seiten verwenden, können Sie den Präsentationscode von der Kernanwendungslogik (oder CodeBehind) trennen. Die CodeBehind-Klassendatei wird kompiliert, sodass sie erstellt und als Objekt verwendet werden kann. Dies ermöglicht den Zugriff auf seine Eigenschaften, Methoden und Ereignishandler. Damit dies funktioniert, muss die ASPX-Seite angeben, dass sie von der CodeBehind-Basisklasse erbt. Verwenden Sie dazu das Inherits Attribut für die @ Page Direktive. Die ASPX-Seite erbt von der CodeBehind-Klasse, und die CodeBehind-Klasse erbt von der Page Klasse.
Wenn Sie Visual Studio .NET verwenden, wird der Direktive standardmäßig ein Codebehind Attribut @ Page hinzugefügt. Das .NET Framework verwendet dieses Attribut nicht tatsächlich. Stattdessen verwendet .NET Visual Studio dieses Attribut, um einen Verweis auf die zugeordnete CodeBehind-Datei für die ASPX-Seite beizubehalten.
Um zu veranschaulichen, wie Visual Studio .NET das Codebehind Attribut verwendet, entfernen Sie das Codebehind Attribut. Sie können nicht mehr mit der rechten Maustaste auf die ASPX-Seite klicken und dann auf Code anzeigen klicken. Dieses Verhalten tritt auf, weil Visual Studio .NET keinen Verweis mehr auf die Klassendatei enthält, die für die Seite verwendet werden kann. Denken Sie daran, dass dies nicht die Art und Weise ist, wie die .NET Framework CodeBehind-Klassendateien verwendet, sondern wie Visual Studio .NET diese Projektdateien verwaltet.
Verwenden des Inherits-Attributs mit vorkompilierten Klassen
Wenn Sie Ihre CodeBehind-Klassen in eine Assembly vorkompilieren, können Sie mithilfe des Inherits Attributs die Klasse angeben, von der geerbt werden soll. In diesem Szenario müssen Sie die tatsächliche CodeBehind-Klassendatei nicht einschließen, wenn Sie die Anwendung bereitstellen. Stattdessen müssen Sie die Assembly und die ASPX-Seite bereitstellen. Sie müssen die Assembly in den Bin Ordner für die Anwendung einfügen, wenn Sie die Anwendung bereitstellen.
In diesem Abschnitt wird veranschaulicht, wie Sie ein neues Webformular erstellen, das den vorkompilierten Ansatz verwendet und von der CodeBehind-Klasse erbt.
Führen Sie die folgenden Schritte aus, um Ihrem Visual Studio .NET-Projekt ein neues Webformular mit dem Namen InheritSample.aspx hinzuzufügen:
- Klicken Sie im Projektmappen-Explorer mit der rechten Maustaste auf den Projektknoten, klicken Sie auf "Hinzufügen" und dann auf "Webformular hinzufügen".
- Geben Sie im Feld "Name" "InheritSample.aspx" ein, und klicken Sie dann auf "Öffnen".
Wechseln Sie zur Entwurfsansicht, und fügen Sie der ASPX-Seite ein Webformularbeschriftungssteuerelement hinzu.
Klicken Sie mit der rechten Maustaste auf die ASPX-Seite, und klicken Sie dann auf Code anzeigen. Die CodeBehind-Datei wird im Editor geöffnet.
Fügen Sie in der CodeBehind-Datei dem Ereignishandler den folgenden Code
Page_Loadhinzu:private void Page_Load(object sender, System.EventArgs e) { Label1.Text = "(Precompiled): Page_Load fired!"; }Hinweis
Dieser Code zeigt nur, dass die CodeBehind-Klasse zur Laufzeit in den späteren Schritten am Beispiel beteiligt ist.
Wechseln Sie von der CodeBehind-Klassendatei zur ASPX-Seite im Editor, und wechseln Sie dann zur HTML-Ansicht.
Überprüfen Sie oben auf der Seite den Code für die
@ PageDirektive. Der Code sollte dem folgenden Standardcode ähneln:<%@ Page language="c#" Codebehind="InheritSample.aspx.cs" AutoEventWireup="false" Inherits="CodeBehindSamples.InheritSample" %>In diesem Beispiel erbt die ASPX-Seite von der CodeBehind-Klasse, die im Namespace benannt
InheritSamplesCodeBehindSamplesist. Standardmäßig verwendet eine Webanwendung, die in Visual Studio .NET erstellt wird, eineProjectName.ClassNameStruktur für denInheritsAttributwert.Klicken Sie im Menü "Datei" auf "Alle speichern", um das Webformular und andere zugeordnete Projektdateien zu speichern.
Klicken Sie in der Visual Studio .NET-IDE im Menü "Erstellen" auf "Erstellen", um das Projekt zu erstellen.
Klicken Sie im Menü Project auf "Alle Dateien anzeigen".
Klicken Sie im Projektmappen-Explorer, um den Ordner zu
Binerweitern. Die Assembly, die generiert wird, wenn Sie das Projekt aus dem vorherigen Abschnitt kompilieren (in diesem Beispiel CodeBehindSamples.dll), wird imBinOrdner angezeigt.Klicken Sie in Visual Studio .NET im Projektmappen-Explorer mit der rechten Maustaste auf die Seite, und klicken Sie dann auf "Im Browser anzeigen", um den Code auszuführen. Die Bezeichnung wird mit dem folgenden Wert aufgefüllt:
(Precompiled): Page_Load fired!
Verwenden des Src-Attributs und Kompilieren nach Bedarf
Wenn Die CodeBehind-Klassendateien bei Bedarf anstatt vorkompiliert kompiliert werden, müssen Sie das Src Attribut verwenden, um den relativen Pfad der CodeBehind-Klassendatei anzugeben. Stellen Sie sicher, dass Sie die tatsächliche Klassendatei einschließen, wenn Sie diese Methode zum Bereitstellen der Anwendung verwenden.
Hinweis
Weitere Informationen zu potenziellen Problemen beim Entwickeln von Anwendungen in Visual Studio .NET mithilfe des Src Attributs finden Sie im Abschnitt "Verweise" in diesem Artikel. Visual Studio .NET ist darauf ausgelegt, den Anwendungscode in einer Assembly vorkompilieren zu können, anstatt den in diesem Abschnitt beschriebenen "Compile on Demand"-Ansatz zu verwenden.
Führen Sie die folgenden Schritte aus, um Ihrem Projekt in Visual Studio .NET ein neues Webformular mit dem Namen "SrcSample.aspx" hinzuzufügen:
- Klicken Sie im Projektmappen-Explorer mit der rechten Maustaste auf den Projektknoten, klicken Sie auf "Hinzufügen" und dann auf "Webformular hinzufügen".
- Geben Sie im Feld "Name" die Datei "SrcSample.aspx" ein, und klicken Sie dann auf "Öffnen".
Wechseln Sie zur Entwurfsansicht, und fügen Sie der ASPX-Seite ein Webformularbeschriftungssteuerelement hinzu.
Klicken Sie mit der rechten Maustaste auf die ASPX-Seite, und klicken Sie dann auf Code anzeigen. Die CodeBehind-Datei wird im Editor geöffnet.
Fügen Sie in der CodeBehind-Datei dem Ereignis den folgenden Code
Page_Loadhinzu:private void Page_Load(object sender, System.EventArgs e) { Label1.Text = "(Src): Page_Load fired!"; }Wechseln Sie von der CodeBehind-Klassendatei zur ASPX-Seite im Editor, und wechseln Sie dann zur HTML-Ansicht.
Überprüfen Sie oben auf der Seite den Code für die
@ PageDirektive. Der Code sollte dem folgenden Standardcode ähneln:<%@ Page language="c#" Codebehind="SrcSample.aspx.cs" AutoEventWireup="false" Inherits="CodeBehindSamples.SrcSample"%>Um dieses Beispiel zu vereinfachen, löschen Sie die Datei Global.asax aus Ihrem Projekt. Dies geschieht nur in diesem Beispiel, um zusätzliche Fehler im Zusammenhang mit der CodeBehind-Seite der Datei "Global.asax" zu verhindern.
Klicken Sie im Menü "Datei" auf "Alle speichern", um das Webformular und andere zugeordnete Projektdateien zu speichern.
Hinweis
Da Sie möchten, dass die CodeBehind-Klassendatei für dieses Beispiel bei Bedarf kompiliert wird, erstellen Sie die Lösung jetzt nicht.
Wenn Sie die Schritte ausgeführt haben, die im Abschnitt "Use the Inherits attribute with precompiled classes" aufgeführt sind, müssen Sie die Assembly im Verzeichnis der Anwendung löschen,
Binbevor Sie die restlichen Schritte in diesem Abschnitt ausführen.Weitere Informationen finden Sie im Abschnitt zur Problembehandlung in diesem Artikel.
Um die Seite auszuführen, starten Sie Internet Explorer, und geben Sie dann manuell die URL der Seite ein. Wählen Sie nicht die Optionen "Ansicht im Browser" oder "Mit durchsuchen" aus der Visual Studio .NET-IDE aus. Andernfalls wird die CodeBehind-Seite bei Verwendung von Visual Studio .NET 2003 in eine Assembly vorkompiliert, die sich standardmäßig im
BinVerzeichnis befindet. Nach dem Anzeigen der Seite erhalten Sie eine Fehlermeldung, die ähnlich wie unten dargestellt ist:Typ "CodeBehindSamples.SrcSample" konnte nicht geladen werden.
Dieser Fehler tritt auf, weil die CodeBehind-Klassendatei noch nicht kompiliert wurde und Sie das Attribut noch nicht eingeschlossen haben,
Srcum auf die CodeBehind-Klassendatei zu verweisen.Fügen Sie das
SrcAttribut der@ PageDirektive wie folgt hinzu:<%@ Page language="c#" Codebehind="SrcSample.aspx.cs" AutoEventWireup="false" Inherits="CodeBehindSamples.SrcSample" Src="SrcSample.aspx.cs"%>Das
SrcAttribut wird mit dem relativen Pfad der CodeBehind-Klassendatei (SrcSample.aspx.cs) aufgelistet, und derInheritsAttributwert wird auf den VerweisCodeBehindSamples.SrcSamplefestgelegt.Klicken Sie im Menü "Datei" auf "Alle speichern", um das Webformular und andere zugeordnete Projektdateien zu speichern. Denken Sie daran, dass Sie die Lösung nicht erstellen, da Sie möchten, dass die CodeBehind-Klassendatei für dieses Beispiel bei Bedarf kompiliert wird.
Um die Seite auszuführen, starten Sie Internet Explorer, und geben Sie dann manuell die URL der Seite ein. Wählen Sie nicht die Optionen "Ansicht im Browser" oder "Mit durchsuchen" aus der Visual Studio .NET-IDE aus. Andernfalls wird die CodeBehind-Seite bei Verwendung von Visual Studio .NET 2003 in eine Assembly vorkompiliert, die sich standardmäßig im
BinVerzeichnis befindet. An diesem Punkt sollte die Seite im Browser geladen werden, und die Bezeichnung wird mit dem folgenden Wert aufgefüllt:(Src): Page_Load fired!Die CodeBehind-Klassendatei wurde jetzt bei Bedarf kompiliert und funktioniert ordnungsgemäß.
Problembehandlung
Möglicherweise wird eine Fehlermeldung angezeigt, die der folgenden ähnelt, wenn Sie Ihre Anwendung in Visual Studio .NET vorkompilieren und dann versuchen, den Compile on Demand-Ansatz mithilfe des
SrcAttributs anzuwenden:Compilerfehlermeldung: CS1595: 'ProjectName.CodeBehindClassName' ist an mehreren Stellen definiert; Verwenden der Definition aus '%windir%:\WINDOWS\Microsoft.NET\Framework\v1.1.4322\Temporary ASP.NET Files \ YourProjectName\d1444413\36fce407\assembly\dl2\009389be\231afa2d_d586c301 \ YourAssemblyName.DLL'
Beachten Sie, dass die Verzeichnisnamen nach YourProjectName im Pfad, der in der Fehlermeldung aufgeführt ist, wahrscheinlich unterschiedlich sind, da ASP.NET automatisch die Erstellung der Verzeichnisse und deren Namen verarbeitet.
Wenn Sie das
SrcAttribut verwenden, müssen Sie die folgenden Schritte ausführen, um das Problem zu beheben, das der Fehlermeldung zugeordnet ist:Löschen Sie das Verzeichnis YourProjectName, auf das in der Fehlermeldung verwiesen wird. Möglicherweise müssen Sie den Befehl auch über die Eingabeaufforderung ausführen,
iisresetbevor Sie diesen Schritt ausführen. Andernfalls wird möglicherweise die folgende Fehlermeldung angezeigt:GeneratedName.dll kann nicht gelöscht werden: Der Zugriff wird verweigert.
Stellen Sie sicher, dass der Datenträger nicht vollständig oder schreibgeschützt ist und die Datei derzeit nicht verwendet wird.Löschen Sie die Assembly im
BinVerzeichnis der Anwendung.Um die Seite auszuführen, starten Sie Internet Explorer, und geben Sie dann manuell die URL zu der Seite ein. Wählen Sie nicht die Optionen "Ansicht im Browser" oder "Mit durchsuchen" aus der Visual Studio .NET-IDE aus. Andernfalls wird bei Verwendung Visual Studio .NET 2003 die CodeBehind-Seite in eine Assembly vorkompiliert, die sich standardmäßig im
BinVerzeichnis befindet.
Hinweis
Microsoft empfiehlt die Verwendung des vorkompilierten Ansatzes anstelle der Kompilierungsmethode bei Bedarf (mithilfe des
SrcAttributs), wenn Sie Ihre Anwendungen mit Visual Studio .NET entwickeln, um diese Arten von Problemen zu vermeiden.Wenn Sie Ihre Webformularseiten in einer einzelnen Datei enthalten möchten oder müssen, entwickeln Sie ihre ASPX-Seiten so, dass sie Ihren Code anstelle der CodeBehind-Klassendatei enthalten.
Weitere Informationen zum Entwickeln von single-file Web Forms in Visual Studio .NET finden Sie in Visual Studio 2003 Retired Technical documentation.
Wenn Sie die CodeBehind-Klassendatei nicht vorkompilieren und das Attribut nicht der Direktive hinzufügen
Srcoder wenn der virtuelle Pfad für das Attribut nicht korrekt@ Pageist, wird die folgende Fehlermeldung angezeigt:Typ "CodeBehindSamples.SrcSample" konnte nicht geladen werden.
Wenn Sie ASPX-Seiten bereitstellen und die zugehörigen CodeBehind-Klassendateien vorkompiliert sind, müssen Sie die Assembly nur im
BinOrdner der Anwendung bereitstellen. Sie müssen die tatsächlichen CodeBehind-Klassendateien nicht mit der Anwendung bereitstellen.Wenn Sie ASPX-Seiten bereitstellen und die zugehörigen CodeBehind-Klassendateien nicht vorkompiliert sind, müssen Sie die CodeBehind-Klassendateien mit der Anwendung bereitstellen. Darüber hinaus müssen Sie das Attribut der Direktive hinzufügen,
Src@ Pageda die Klassendatei verfügbar sein muss, wenn sie bei Bedarf kompiliert wird.
References
Weitere Informationen zu Assemblys finden Sie unter Assemblys.
Weitere Artikel, Beispiele und andere Ressourcen im Zusammenhang mit ASP.NET Programmierung finden Sie unter ASP.NET.
Weitere Informationen zur @Page-Direktive und deren verschiedenen Attributen finden Sie unter @ Page.
Weitere Informationen zu allgemeinen Web Forms Syntax finden Sie unter Web Forms Syntax.
Weitere Informationen finden Sie unter ASP.NET CodeBehind-Modellübersicht.