Codeblöcke in ASP.NET
Aktualisiert: November 2007
Ähnlich wie in der Seitenstruktur von Active Server Pages (ASP) können im Einzeldateiseitenmodell von ASP.NET vor dem HTML-Code Skriptblöcke stehen, die Code enthalten, und im HTML-Code können besondere Markuptags verwendet werden. In diesem Thema werden die Probleme beschrieben, die mit der Aktualisierung von ASP-Code auf ASP.NET verbunden sind.
Im Code-Behind-Seitenmodell von ASP.NET wird Skriptblockcode von HTML-Markuptags und ASP.NET-Markuptags getrennt. Weitere Informationen hierzu finden Sie unter Übersicht über die Syntax von ASP.NET-Webseiten. Weitere Informationen über Datenbindungssyntax, die das Binden von Werten von Steuerelementeigenschaften an Daten ermöglicht, finden Sie unter Übersicht über Datenbindungsausdrücke.
Deklarieren von Variablen und Prozeduren
Alle ASP.NET-Prozeduren und globalen Variablen sollten innerhalb von <script runat="server">-Blöcken deklariert werden, die sich vor dem öffnenden <html>-Tag befinden, jedoch nicht innerhalb von ASP-Trennzeichen <%...%>. Variablen können weiterhin in <%...%>-Renderblöcken deklariert werden. Diese Variablen sind jedoch nur für Renderblöcke auf der Seite und nicht global für andere Funktionen oder Prozeduren verfügbar. Eine Seite kann mehrere script-Blöcke enthalten, es müssen jedoch alle Blöcke auf der Seite in derselben Programmiersprache geschrieben worden sein.
Das folgende Beispiel zeigt eine ASP.NET-Seite, bei der Variablen und Prozeduren in einem Skriptblock und in einem Renderblock deklariert werden. Wenn Sie der ASP.NET-Seite im URL eine Abfragezeichenfolge übergeben, wird die Abfragezeichenfolge auf der Seite angezeigt.
<%@ Page Language="VB" %>
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN"
"http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<script runat="server">
' The following variables are visible to all procedures
' within the <script> block.
Dim str As String
Dim i, i2 As Integer
Function DoubleIt(ByVal inpt As Integer) As Integer
' The following variable is visible only within
' the DoubleIt procedure.
Dim factor As Integer = 2
DoubleIt = inpt * factor
End Function
</script>
<html xmlns="http://www.w3.org/1999/xhtml" >
<head id="Head1" runat="server">
<title>Untitled Page</title>
</head>
<body>
<form id="form1" runat="server">
<div>
<%
' The following local variable is visible only within this
' and other render blocks on the page.
Dim myVar
myVar = Request.QueryString
Response.Write("The querystring is " _
& Server.HtmlEncode(myVar.ToString()))
%>
</div>
</form>
</body>
</html>
<%@ Page Language="C#" %>
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN"
"http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<script runat="server">
// The following variables are visible to all procedures
// within the <script> block.
String str;
int i;
int i2;
int DoubleIt(int inpt)
{
// The following variable is visible only within
// the DoubleIt procedure.
int factor = 2;
return inpt * factor;
}
</script>
<html xmlns="http://www.w3.org/1999/xhtml" >
<head runat="server">
<title>Untitled Page</title>
</head>
<body>
<form id="form1" runat="server">
<div>
<%
// The following local variable is visible only within this
// and other render blocks on the page.
object myVar;
myVar = Request.QueryString;
Response.Write("The querystring is " +
Server.HtmlEncode(myVar.ToString()));
%>
</div>
</form>
</body>
</html>
Darstellen von Text
Renderfunktionen werden in ASP.NET nicht unterstützt. Mithilfe von älteren ASP-Versionen könnten Sie literales HTML in einen Prozedurtext einfügen, wie im folgenden Codebeispiel gezeigt.
<% Sub SomeProcedure() %>
<H3> Render this line of bold text. </H3>
<% End Sub %>
Dieser Code würde auf einer ASP.NET-Seite einen Fehler verursachen. Für ASP.NET müsste der Code folgendermaßen aussehen.
<script runat=server>
Sub SomeProcedure()
Response.Write("<H3> Render this line in bold text.</H3>")
End Sub
</script>
Abgesehen von globalen Variablendeklarationen muss der gesamte Code, der sich zwischen <script>…</script>-Tags befindet, in Prozeduren gekapselt werden.
Verarbeiten, Laden und Entladen von Seiten
In ASP wurde der Code in <%...%>-Tags eingeschlossen, und die Seitenverarbeitung begann mit der ersten Anweisung nach dem ersten <%>-Tag. In ASP.NET muss Code, der unmittelbar nach dem Laden der Seite verarbeitet werden soll, in das systeminterne Page_Load-Ereignis eingeschlossen werden. Sie können weiterhin Code in <%...%>-Blöcke schreiben, er wird jedoch zur Renderzeit (wie in ASP von oben nach unten) nach dem Laden der Seite ausgeführt. Wenn Sie Initialisierungscode ausführen müssen, sollte sich dieser im Page_Load-Ereignis befinden, das unmittelbar nach dem Laden der Seite durch das ASP.NET-Modul ausgelöst wird, wie im folgenden Beispiel gezeigt.
<%@ Page Language="VB" %>
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<script runat="server">
Protected Sub Page_Load(ByVal sender As Object, ByVal e As System.EventArgs)
' Place all startup code here, including initialization of
' variables, preloading of controls, and loading of
' data from a database.
If Page.IsPostBack Then
Response.Write("<br />Page has been posted back.")
End If
End Sub
</script>
<html xmlns="http://www.w3.org/1999/xhtml" >
<head runat="server">
<title>Untitled Page</title>
</head>
<body>
<form id="form1" runat="server">
<div>
Hello.<br />
<asp:Button ID="Button1" runat="server"
Text="Click to Post Back" />
</div>
</form>
</body>
</html>
<%@ Page Language="C#" %>
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<script runat="server">
protected void Page_Load(object sender, EventArgs e)
{
if (IsPostBack)
{
Response.Write("<br />Page has been posted back.");
}
}
</script>
<html xmlns="http://www.w3.org/1999/xhtml" >
<head id="Head1" runat="server">
<title>Untitled Page</title>
</head>
<body>
<form id="form1" runat="server">
<div>
Hello.<br />
<asp:Button ID="Button1" runat="server"
Text="Click to Post Back" />
</div>
</form>
</body>
</html>
Das systeminterne Page_Unload-Ereignis wird immer als letztes Ereignis während eines Seitenausführungszyklus ausgelöst und kann zum Ausführen von beliebigem Seitenbereinigungscode verwendet werden.
Weitere Informationen finden Sie unter Übersicht über den Lebenszyklus von ASP.NET-Seiten und Ereignismodell für ASP.NET-Webserversteuerelemente.
Siehe auch
Konzepte
Übersicht über die ASP.NET-Seitenklasse
Codemodell für ASP.NET-Webseiten
Clientskript in ASP.NET-Webseiten
Übersicht über die Syntax von ASP.NET-Webseiten
Übersicht über den Lebenszyklus von ASP.NET-Seiten
Ereignismodell für ASP.NET-Webserversteuerelemente