Freigeben über


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 >-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 >
    ' 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" >
    <title>Untitled Page</title>
</head>
<body>
    <form id="form1" >
    <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 >
    // 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 >
    <title>Untitled Page</title>
</head>
<body>
    <form id="form1" >
    <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 >
    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 >
    <title>Untitled Page</title>
</head>
<body>
    <form id="form1" >
    <div>
    Hello.<br />
    <asp:Button ID="Button1"  
    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 >
    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" >
    <title>Untitled Page</title>
</head>
<body>
    <form id="form1" >
    <div>
    Hello.<br />
    <asp:Button ID="Button1"  
    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

Weitere Ressourcen

Migrieren zu ASP.NET