Einführung in ASP.NET Webprogrammierung mithilfe der Razor-Syntax (C#)

von Tom FitzMacken

In diesem Artikel erhalten Sie eine Übersicht über die Programmierung mit ASP.NET Web Pages unter Verwendung der Razor-Syntax. ASP.NET ist die Technologie von Microsoft zum Ausführen dynamischer Webseiten auf Webservern. Dieser Artikel konzentriert sich auf die Verwendung der Programmiersprache C#.

Was Sie lernen werden:

  • Die 8 wichtigsten Programmiertipps für die ersten Schritte mit der Programmierung ASP.NET Web Pages mit Razor-Syntax.
  • Grundlegende Programmierkonzepte, die Sie benötigen.
  • Worum es ASP.NET Servercode und die Razor-Syntax geht.

Softwareversionen

  • ASP.NET Web Pages (Razor) 3

Dieses Tutorial funktioniert auch mit ASP.NET Web Pages 2.

Die 8 besten Programmiertipps

In diesem Abschnitt werden einige Tipps aufgeführt, die Sie unbedingt kennen müssen, wenn Sie mit dem Schreiben ASP.NET Servercode mit der Razor-Syntax beginnen.

Hinweis

Die Razor-Syntax basiert auf der Programmiersprache C#, und dies ist die Sprache, die am häufigsten mit ASP.NET Web Pages verwendet wird. Die Razor-Syntax unterstützt jedoch auch die Visual Basic-Sprache, und alles, was Sie sehen, können Sie auch in Visual Basic tun. Weitere Informationen finden Sie im Anhang Visual Basic Language and Syntax.

Weitere Informationen zu den meisten dieser Programmiertechniken finden Sie weiter unten in diesem Artikel.

1. Sie fügen code zu einer Seite mit dem @-Zeichen hinzu.

Das @ Zeichen startet Inlineausdrücke, einzelne Anweisungsblöcke und Blöcke mit mehreren Anweisungen:

<!-- Single statement blocks  -->
@{ var total = 7; }
@{ var myMessage = "Hello World"; }

<!-- Inline expressions -->
<p>The value of your account is: @total </p>
<p>The value of myMessage is: @myMessage</p>

<!-- Multi-statement block -->
@{
    var greeting = "Welcome to our site!";
    var weekDay = DateTime.Now.DayOfWeek;
    var greetingMessage = greeting + " Today is: " + weekDay;
}
<p>The greeting is: @greetingMessage</p>

So sehen diese Anweisungen aus, wenn die Seite in einem Browser ausgeführt wird:

Razor-Img1

Tipp

HTML-Codierung

Wenn Sie Inhalte auf einer Seite mit dem @ Zeichen anzeigen, wie in den vorherigen Beispielen, ASP.NET die Ausgabe HTML-codiert. Dadurch werden reservierte HTML-Zeichen (z < . B. und > und &) durch Codes ersetzt, mit denen die Zeichen als Zeichen auf einer Webseite angezeigt werden können, anstatt als HTML-Tags oder -Entitäten interpretiert zu werden. Ohne HTML-Codierung wird die Ausgabe Ihres Servercodes möglicherweise nicht ordnungsgemäß angezeigt, und eine Seite kann Sicherheitsrisiken offenlegen.

Wenn Sie HTML-Markup ausgeben möchten, das Tags als Markup rendert (z. B <p></p> . für einen Absatz oder <em></em> zum Hervorheben von Text), lesen Sie den Abschnitt Kombinieren von Text, Markup und Code in Codeblöcken weiter unten in diesem Artikel.

Weitere Informationen zur HTML-Codierung finden Sie unter Arbeiten mit Formularen.

2. Sie schließen Codeblöcke in geschweifte Klammern ein

Ein Codeblock enthält eine oder mehrere Codeanweisungen und wird in geschweifte Klammern eingeschlossen.

<!-- Single statement block.  -->
@{ var theMonth = DateTime.Now.Month; }
<p>The numeric value of the current month: @theMonth</p>

<!-- Multi-statement block. -->
@{
    var outsideTemp = 79;
    var weatherMessage = "Hello, it is " + outsideTemp + " degrees.";
}
<p>Today's weather: @weatherMessage</p>

Das in einem Browser angezeigte Ergebnis:

Razor-Img2

3. Innerhalb eines Blocks beenden Sie jede Code-Anweisung mit einem Semikolon.

Innerhalb eines Codeblocks muss jede vollständige Codeanweisungen mit einem Semikolon enden. Inlineausdrücke enden nicht mit einem Semikolon.

<!-- Single-statement block -->
@{ var theMonth = DateTime.Now.Month; }

<!-- Multi-statement block -->
@{
    var outsideTemp = 79;
    var weatherMessage = "Hello, it is " + outsideTemp + " degrees.";
}

<!-- Inline expression, so no semicolon -->
<p>Today's weather: @weatherMessage</p>

4. Sie verwenden Variablen zum Speichern von Werten

Sie können Werte in einer Variablen speichern, einschließlich Zeichenfolgen, Zahlen und Datumsangaben usw. Sie erstellen eine neue Variable mit dem var Schlüsselwort (keyword). Sie können Variablenwerte direkt in eine Seite einfügen, indem Sie verwenden @.

<!-- Storing a string -->
@{ var welcomeMessage = "Welcome, new members!"; }
<p>@welcomeMessage</p>

<!-- Storing a date -->
@{ var year = DateTime.Now.Year; }

<!-- Displaying a variable -->
<p>Welcome to our new members who joined in @year!</p>

Das in einem Browser angezeigte Ergebnis:

Razor-Img3

5. Sie schließen literale Zeichenfolgenwerte in doppelte Anführungszeichen ein.

Eine Zeichenfolge ist eine Sequenz von Zeichen, die als Text behandelt werden. Um eine Zeichenfolge anzugeben, schließen Sie sie in doppelte Anführungszeichen ein:

@{ var myString = "This is a string literal"; }

Wenn die anzuzeigende Zeichenfolge einen umgekehrten Schrägstrich ( \ ) oder doppelte Anführungszeichen ( ) enthält, " verwenden Sie ein wörtliches Zeichenfolgenliteral , dem der @ Operator vorangestellt ist. (In C# hat das Zeichen \ eine besondere Bedeutung, es sei denn, Sie verwenden ein wörtliches Zeichenfolgenliteral.)

<!-- Embedding a backslash in a string -->
@{ var myFilePath = @"C:\MyFolder\"; }
<p>The path is: @myFilePath</p>

Verwenden Sie zum Einbetten doppelter Anführungszeichen ein wörtliches Zeichenfolgenliteral, und wiederholen Sie die Anführungszeichen:

<!-- Embedding double quotation marks in a string -->
@{ var myQuote = @"The person said: ""Hello, today is Monday."""; }
<p>@myQuote</p>

Dies ist das Ergebnis der Verwendung dieser beiden Beispiele auf einer Seite:

Razor-Img4

Hinweis

Beachten Sie, dass das @ Zeichen sowohl zum Markieren ausführlicher Zeichenfolgenliterale in C# als auch zum Markieren von Code in ASP.NET Seiten verwendet wird.

6. Beim Code wird die Groß-/Kleinschreibung beachtet.

Bei Schlüsselwörtern (wie var, trueund ) und ifVariablennamen in C# wird die Groß-/Kleinschreibung beachtet. In den folgenden Codezeilen werden zwei verschiedene Variablen erstellt: lastName und LastName.

@{
    var lastName = "Smith";
    var LastName = "Jones";
}

Wenn Sie eine Variable als var lastName = "Smith"; deklarieren und versuchen, auf diese Variable auf Ihrer Seite als @LastNamezu verweisen, erhalten Sie den Wert "Jones" anstelle von "Smith".

Hinweis

In Visual Basic wird bei Schlüsselwörtern und Variablen nicht zwischen Groß-/Kleinschreibung unterschieden.

7. Ein Großteil Ihrer Codierung umfasst Objekte

Ein Objekt stellt eine Sache dar, mit der Sie programmieren können– eine Seite, ein Textfeld, eine Datei, ein Bild, eine Webanforderung, eine E-Mail-Nachricht, einen Kundendatensatz (Datenbankzeile) usw. Objekte verfügen über Eigenschaften, die ihre Merkmale beschreiben und die Sie lesen oder ändern können– ein Textfeldobjekt verfügt unter anderem über eine Text -Eigenschaft, ein Anforderungsobjekt über eine Url -Eigenschaft, eine E-Mail-Nachricht über eine From -Eigenschaft und ein Kundenobjekt über eine FirstName -Eigenschaft. Objekte verfügen auch über Methoden, die die "Verben" sind, die sie ausführen können. Beispiele hierfür sind die Methode eines Dateiobjekts Save , die Methode eines Bildobjekts Rotate und die Methode eines E-Mail-Objekts Send .

Sie arbeiten häufig mit dem Request -Objekt, das Ihnen Informationen wie die Werte von Textfeldern (Formularfeldern) auf der Seite, den Typ des Browsers, der die Anforderung gestellt hat, die URL der Seite, die Benutzeridentität usw. liefert. Das folgende Beispiel zeigt, wie Sie auf Eigenschaften des Request -Objekts zugreifen und die MapPath -Methode des Request -Objekts aufrufen, wodurch Sie den absoluten Pfad der Seite auf dem Server erhalten:

<table border="1">
<tr>
    <td>Requested URL</td>
    <td>Relative Path</td>
    <td>Full Path</td>
    <td>HTTP Request Type</td>
</tr>
<tr>
    <td>@Request.Url</td>
    <td>@Request.FilePath</td>
    <td>@Request.MapPath(Request.FilePath)</td>
    <td>@Request.RequestType</td>
</tr>
</table>

Das in einem Browser angezeigte Ergebnis:

Razor-Img5

8. Sie können Code schreiben, der Entscheidungen trifft.

Ein wichtiges Feature dynamischer Webseiten ist, dass Sie basierend auf Bedingungen bestimmen können, was zu tun ist. Dies geschieht am häufigsten mit der -Anweisung (und optionalen ifelse Anweisung).

@{
   var result = "";
   if(IsPost)
   {
      result = "This page was posted using the Submit button.";
   }
   else
   {
      result = "This was the first request for this page.";
   }
}

<!DOCTYPE html>
<html>
    <head>
        <title></title>
    </head>
<body>
<form method="POST" action="" >
  <input type="Submit" name="Submit" value="Submit"/>
  <p>@result</p>
</form>
</body>
</html>

Die -Anweisung if(IsPost) ist eine Kurzform zum Schreiben if(IsPost == true)von . Zusammen mit if -Anweisungen gibt es eine Vielzahl von Möglichkeiten zum Testen von Bedingungen, Wiederholen von Codeblöcken usw., die weiter unten in diesem Artikel beschrieben werden.

Das Ergebnis, das in einem Browser angezeigt wird (nach dem Klicken auf Senden):

Razor-Img6

Tipp

HTTP GET- und POST-Methoden und die IsPost-Eigenschaft

Das für Webseiten (HTTP) verwendete Protokoll unterstützt eine sehr begrenzte Anzahl von Methoden (Verben), die zum Senden von Anforderungen an den Server verwendet werden. Die beiden häufigsten sind GET, das zum Lesen einer Seite verwendet wird, und POST, das zum Übermitteln einer Seite verwendet wird. Wenn ein Benutzer zum ersten Mal eine Seite anfordert, wird die Seite im Allgemeinen mithilfe von GET angefordert. Wenn der Benutzer ein Formular ausfüllt und dann auf eine Schaltfläche zum Senden klickt, sendet der Browser eine POST-Anforderung an den Server.

Bei der Webprogrammierung ist es oft hilfreich zu wissen, ob eine Seite als GET oder als POST angefordert wird, damit Sie wissen, wie die Seite verarbeitet wird. In ASP.NET Web Pages können Sie die IsPost -Eigenschaft verwenden, um zu sehen, ob es sich bei einer Anforderung um eine GET- oder eine POST-Anforderung handelt. Wenn es sich bei der Anforderung um einen POST-Wert handelt, gibt die IsPost Eigenschaft true zurück, und Sie können beispielsweise die Werte von Textfeldern in einem Formular lesen. Viele Beispiele, die Sie sehen, zeigen, wie Sie die Seite je nach Wert von IsPostunterschiedlich verarbeiten.

Ein einfaches Codebeispiel

In diesem Verfahren wird gezeigt, wie Sie eine Seite erstellen, die grundlegende Programmiertechniken veranschaulicht. Im Beispiel erstellen Sie eine Seite, auf der Benutzer zwei Zahlen eingeben können, diese dann hinzugefügt und das Ergebnis angezeigt wird.

  1. Erstellen Sie in Ihrem Editor eine neue Datei, und nennen Sie sie AddNumbers.cshtml.

  2. Kopieren Sie den folgenden Code und markup in die Seite, und ersetzen Sie alle bereits auf der Seite vorhandenen Elemente.

    @{
        var total = 0;
        var totalMessage = "";
        if(IsPost) {
    
            // Retrieve the numbers that the user entered.
            var num1 = Request["text1"];
            var num2 = Request["text2"];
    
            // Convert the entered strings into integers numbers and add.
            total = num1.AsInt() + num2.AsInt();
            totalMessage = "Total = " + total;
        }
    }
    
    <!DOCTYPE html>
    <html lang="en">
      <head>
        <title>Add Numbers</title>
        <meta charset="utf-8" />
        <style type="text/css">
          body {background-color: beige; font-family: Verdana, Arial;
                margin: 50px; }
          form {padding: 10px; border-style: solid; width: 250px;}
        </style>
      </head>
    <body>
      <p>Enter two whole numbers and then click <strong>Add</strong>.</p>
      <form action="" method="post">
        <p><label for="text1">First Number:</label>
          <input type="text" name="text1" />
        </p>
        <p><label for="text2">Second Number:</label>
          <input type="text" name="text2" />
        </p>
        <p><input type="submit" value="Add" /></p>
      </form>
    
      <p>@totalMessage</p>
    
    </body>
    </html>
    

    Beachten Sie folgendes:

    • Das @ Zeichen startet den ersten Codeblock auf der Seite und steht vor der totalMessage Variablen, die am unteren Rand der Seite eingebettet ist.
    • Der Block oben auf der Seite ist in geschweifte Klammern eingeschlossen.
    • Im Block oben enden alle Zeilen mit einem Semikolon.
    • Die Variablen total, num1, num2und totalMessage speichern mehrere Zahlen und eine Zeichenfolge.
    • Der der totalMessage Variablen zugewiesene Literalzeichenfolgenwert befindet sich in doppelten Anführungszeichen.
    • Da die Groß-/Kleinschreibung beim Code beachtet wird, muss ihr totalMessage Name bei Verwendung der Variablen am unteren Rand der Seite genau mit der Variablen oben übereinstimmen.
    • Der Ausdruck num1.AsInt() + num2.AsInt() zeigt, wie sie mit Objekten und Methoden arbeiten. Die AsInt -Methode für jede Variable konvertiert die von einem Benutzer eingegebene Zeichenfolge in eine Zahl (eine ganze Zahl), sodass Sie arithmetisch darauf ausführen können.
    • Das <form> Tag enthält ein method="post" -Attribut. Dies gibt an, dass die Seite mithilfe der HTTP POST-Methode an den Server gesendet wird, wenn der Benutzer auf Hinzufügen klickt. Wenn die Seite übermittelt wird, wird der if(IsPost) Test als true ausgewertet, und der bedingte Code wird ausgeführt, wobei das Ergebnis des Hinzufügens der Zahlen angezeigt wird.
  3. Speichern Sie die Seite, und führen Sie sie in einem Browser aus. (Stellen Sie sicher, dass die Seite im Arbeitsbereich Dateien ausgewählt ist , bevor Sie sie ausführen.) Geben Sie zwei ganze Zahlen ein, und klicken Sie dann auf die Schaltfläche Hinzufügen .

    Razor-Img7

Grundlegende Programmierkonzepte

Dieser Artikel bietet Ihnen eine Übersicht über ASP.NET Webprogrammierung. Es ist keine vollständige Prüfung, nur eine kurze Tour durch die Programmierkonzepte, die Sie am häufigsten verwenden werden. Dennoch deckt es fast alles ab, was Sie für die ersten Schritte mit ASP.NET Web Pages benötigen.

Aber zunächst ein wenig technischer Hintergrund.

Razor-Syntax, Servercode und ASP.NET

Razor-Syntax ist eine einfache Programmiersyntax zum Einbetten von serverbasiertem Code in eine Webseite. Auf einer Webseite, die die Razor-Syntax verwendet, gibt es zwei Arten von Inhalten: Clientinhalt und Servercode. Clientinhalte sind die Dinge, die Sie in Webseiten gewohnt sind: HTML-Markup (Elemente), Formatinformationen wie CSS, möglicherweise ein Clientskript wie JavaScript und Nur-Text.

Mit der Razor-Syntax können Sie diesem Clientinhalt Servercode hinzufügen. Wenn auf der Seite Servercode vorhanden ist, führt der Server diesen zuerst aus, bevor die Seite zum Browser gesendet wird. Durch die Ausführung auf dem Server kann der Code Aufgaben ausführen, die viel komplexer sein können, indem Clientinhalte allein verwendet werden, z. B. der Zugriff auf serverbasierte Datenbanken. Am wichtigsten ist, dass Servercode Clientinhalte dynamisch erstellen kann– er kann HTML-Markup oder andere Inhalte direkt generieren und dann zusammen mit jedem statischen HTML-Code, den die Seite enthalten kann, an den Browser senden. Aus dessen Perspektive unterscheiden sich Clientinhalte, die durch Servercode generiert wurden, nicht von anderen Clientinhalten. Wie Sie bereits gesehen haben, ist der erforderliche Servercode recht einfach.

ASP.NET Webseiten, die die Razor-Syntax enthalten, verfügen über eine spezielle Dateierweiterung (CSHTML oder VBHTML). Der Server erkennt diese Erweiterungen, führt den Code aus, der mit Razor-Syntax markiert ist, und sendet die Seite dann an den Browser.

Wo passt ASP.NET hinein?

Razor-Syntax basiert auf einer Technologie von Microsoft namens ASP.NET, die wiederum auf dem Microsoft-.NET Framework basiert. The.NET Framework ist ein großes, umfassendes Programmierframework von Microsoft für die Entwicklung praktisch jeder Art von Computeranwendung. ASP.NET ist der Teil des .NET Framework, der speziell zum Erstellen von Webanwendungen entwickelt wurde. Entwickler haben ASP.NET verwendet, um viele der weltweit größten und mit dem höchsten Datenverkehr besuchten Websites zu erstellen. (Jedes Mal, wenn die Dateinamenerweiterung .aspx als Teil der URL auf einer Website angezeigt wird, wissen Sie, dass die Website mit ASP.NET geschrieben wurde.)

Die Razor-Syntax bietet Ihnen alle Möglichkeiten der ASP.NET, aber mit einer vereinfachten Syntax, die einfacher zu erlernen ist, wenn Sie ein Anfänger sind und die Sie produktiver macht, wenn Sie ein Experte sind. Obwohl diese Syntax einfach zu verwenden ist, bedeutet die familiäre Beziehung zu ASP.NET und der .NET Framework, dass Sie mit immer komplexeren Websites über die Leistungsfähigkeit der größeren Frameworks verfügen, die Ihnen zur Verfügung stehen.

Razor-Img8

Tipp

Klassen und Instanzen

ASP.NET Servercode verwendet Objekte, die wiederum auf der Idee von Klassen basieren. Die -Klasse ist die Definition oder Vorlage für ein -Objekt. Beispielsweise kann eine Anwendung eine Customer Klasse enthalten, die die Eigenschaften und Methoden definiert, die jedes Kundenobjekt benötigt.

Wenn die Anwendung mit tatsächlichen Kundeninformationen arbeiten muss, wird ein instance eines Kundenobjekts erstellt (oder instanziiert). Jeder einzelne Kunde ist ein separater instance der Customer Klasse. Jede instance unterstützt dieselben Eigenschaften und Methoden, aber die Eigenschaftswerte für jede instance sind in der Regel unterschiedlich, da jedes Kundenobjekt eindeutig ist. In einem Kundenobjekt könnte die LastName Eigenschaft "Smith" lauten, in einem anderen Kundenobjekt könnte die LastName Eigenschaft "Jones" lauten.

Ebenso ist jede einzelne Webseite in Ihrer Website ein Page Objekt, das ein instance der Page -Klasse ist. Eine Schaltfläche auf der Seite ist ein Button Objekt, das ein instance der Button -Klasse ist usw. Jeder instance hat seine eigenen Merkmale, aber sie basieren alle auf dem, was in der Klassendefinition des Objekts angegeben ist.

Grundlegende Syntax

Zuvor haben Sie ein einfaches Beispiel für das Erstellen einer ASP.NET Web Pages Seite und das Hinzufügen von Servercode zum HTML-Markup gesehen. Hier lernen Sie die Grundlagen des Schreibens von ASP.NET Servercode mithilfe der Razor-Syntax kennen, d. h. die Regeln der Programmiersprache.

Wenn Sie Erfahrung mit der Programmierung haben (insbesondere wenn Sie C, C++, C#, Visual Basic oder JavaScript verwendet haben), wird Ihnen vieles von dem vertraut sein, was Sie hier lesen. Sie müssen sich wahrscheinlich nur damit vertraut machen, wie Servercode zum Markup in CSHTML-Dateien hinzugefügt wird.

Kombinieren von Text, Markup und Code in Codeblöcken

In Servercodeblöcken möchten Sie häufig Text oder Markup (oder beides) auf der Seite ausgeben. Wenn ein Servercodeblock Text enthält, der keinen Code ist und stattdessen so gerendert werden soll, muss ASP.NET in der Lage sein, diesen Text vom Code zu unterscheiden. Hierzu stehen mehrere Vorgehensweisen zur Verfügung.

  • Schließen Sie den Text in ein HTML-Element wie <p></p> oder <em></em>ein:

    @if(IsPost) {
        // This line has all content between matched <p> tags.
        <p>Hello, the time is @DateTime.Now and this page is a postback!</p>
    } else {
        // All content between matched tags, followed by server code.
        <p>Hello <em>stranger</em>, today is: <br /> </p>  @DateTime.Now
    }
    

    Das HTML-Element kann Text, zusätzliche HTML-Elemente und Servercodeausdrücke enthalten. Wenn ASP.NET das öffnende HTML-Tag (z. B. ) sieht, <p>rendert es alles, einschließlich des Elements und seines Inhalts, wie im Browser ist, und löst Servercodeausdrücke auf.

  • Verwenden Sie den @: Operator oder das <text> -Element. Gibt @: eine einzelne Inhaltszeile aus, die Nur-Text- oder nicht übereinstimmende HTML-Tags enthält. Das <text> -Element umschließt mehrere Zeilen zur Ausgabe. Diese Optionen sind nützlich, wenn Sie kein HTML-Element als Teil der Ausgabe rendern möchten.

    @if(IsPost) {
        // Plain text followed by an unmatched HTML tag and server code.
        @: The time is: <br /> @DateTime.Now
        <br/>
        // Server code and then plain text, matched tags, and more text.
        @DateTime.Now @:is the <em>current</em> time.
    }
    

    Wenn Sie mehrere Textzeilen oder nicht übereinstimmende HTML-Tags ausgeben möchten, können Sie jeder Zeile @:vorangehen, oder Sie können die Zeile in ein <text> Element einschließen. Wie der @: Operator werden Tags von ASP.NET verwendet,<text> um Textinhalt zu identifizieren, und werden nie in der Seitenausgabe gerendert.

    @if(IsPost) {
        // Repeat the previous example, but use <text> tags.
        <text>
        The time is: <br /> @DateTime.Now
        <br/>
        @DateTime.Now is the <em>current</em> time.
        </text>
    }
    
    @{
        var minTemp = 75;
        <text>It is the month of @DateTime.Now.ToString("MMMM"), and
        it's a <em>great</em> day! <br /><p>You can go swimming if it's at
        least @minTemp degrees. </p></text>
    }
    

    Im ersten Beispiel wird das vorherige Beispiel wiederholt, es wird jedoch ein einzelnes <text> Tagpaar verwendet, um den zu rendernden Text einzuschließen. Im zweiten Beispiel umschließen die <text> Tags und </text> drei Zeilen, die alle nicht markierten Text und nicht übereinstimmende HTML-Tags (<br />) sowie Servercode und übereinstimmende HTML-Tags enthalten. Auch hier können Sie jeder Zeile einzeln den @: Operator vorangehen. In beiden Richtungen funktioniert das.

    Hinweis

    Wenn Sie Text wie in diesem Abschnitt gezeigt ausgeben – mit einem HTML-Element, dem @: Operator oder dem <text> -Element –, ASP.NET die Ausgabe nicht HTML-codiert. (Wie bereits erwähnt, codiert ASP.NET die Ausgabe von Servercodeausdrücken und Servercodeblöcken, denen vorangestellt @ist, außer in den in diesem Abschnitt genannten Sonderfällen.)

Whitespace

Zusätzliche Leerzeichen in einer -Anweisung (und außerhalb eines Zeichenfolgenliterals) wirken sich nicht auf die Anweisung aus:

@{ var lastName =    "Smith"; }

Ein Zeilenumbruch in einer Anweisung hat keine Auswirkungen auf die Anweisung, und Sie können Anweisungen zur Lesbarkeit umschließen. Die folgenden Anweisungen sind gleich:

@{ var theName =
"Smith"; }

@{
    var
    personName
    =
    "Smith"
    ;
}

Sie können jedoch keine Zeile in der Mitte eines Zeichenfolgenliterals umschließen. Das folgende Beispiel funktioniert nicht:

@{ var test = "This is a long
    string"; }  // Does not work!

Um eine lange Zeichenfolge zu kombinieren, die wie der obige Code in mehrere Zeilen umschließt, gibt es zwei Optionen. Sie können den Verkettungsoperator (+) verwenden, den Sie später in diesem Artikel sehen werden. Sie können das @ Zeichen auch verwenden, um ein wörtliches Zeichenfolgenliteral zu erstellen, wie Sie weiter oben in diesem Artikel gesehen haben. Sie können wörtliche Zeichenfolgenliterale zeilenübergreifend aufteilen:

@{ var longString = @"This is a
    long
    string";
}

Code- (und Markup-)Kommentare

Mit Kommentaren können Sie Notizen für sich selbst oder andere hinterlassen. Sie ermöglichen ihnen auch das Deaktivieren (Auskommentieren) eines Code- oder Markupabschnitts, den Sie nicht ausführen möchten, aber vorerst auf Ihrer Seite beibehalten möchten.

Es gibt eine andere Kommentarsyntax für Razor-Code und für HTML-Markup. Wie bei allen Razor-Code werden Razor-Kommentare auf dem Server verarbeitet (und dann entfernt), bevor die Seite an den Browser gesendet wird. Daher können Sie mit der Razor-Kommentarsyntax Kommentare in den Code (oder sogar in das Markup) einfügen, die Sie beim Bearbeiten der Datei sehen können, aber die Benutzer selbst in der Seitenquelle nicht sehen.

Für ASP.NET Razor-Kommentare beginnen Sie den Kommentar mit @* und beenden ihn mit *@. Der Kommentar kann sich in einer oder mehreren Zeilen befinden:

@*  A one-line code comment. *@

@*
    This is a multiline code comment.
    It can continue for any number of lines.
*@

Hier ist ein Kommentar innerhalb eines Codeblocks:

@{
    @* This is a comment. *@
    var theVar = 17;
}

Hier ist derselbe Codeblock, in dem die Codezeile auskommentiert ist, sodass sie nicht ausgeführt wird:

@{
    @* This is a comment. *@
    @* var theVar = 17;  *@
}

In einem Codeblock können Sie alternativ zur Verwendung der Razor-Kommentarsyntax die Kommentarsyntax der verwendeten Programmiersprache verwenden, z. B. C#:

@{
    // This is a comment.
    var myVar = 17;
    /* This is a multi-line comment
    that uses C# commenting syntax. */
}

In C# werden den einzeiligen Kommentaren die // Zeichen vorangestellt, und mehrzeilige Kommentare beginnen mit /* und enden mit */. (Wie bei Razor-Kommentaren werden C#-Kommentare nicht im Browser gerendert.)

Für Markup können Sie, wie Sie wahrscheinlich wissen, einen HTML-Kommentar erstellen:

<!-- This is a comment.  -->

HTML-Kommentare beginnen mit <!-- Zeichen und enden mit -->. Sie können HTML-Kommentare verwenden, um nicht nur Text, sondern auch jedes HTML-Markup einzuschließen, das Sie möglicherweise auf der Seite behalten möchten, aber nicht gerendert werden sollen. In diesem HTML-Kommentar werden der gesamte Inhalt der Tags und der darin enthaltene Text ausgeblendet:

<!-- <p>This is my paragraph.</p>  -->

Im Gegensatz zu Razor-Kommentaren werden HTML-Kommentare auf der Seite gerendert, und der Benutzer kann sie durch Anzeigen der Seitenquelle anzeigen.

Razor hat Einschränkungen für geschachtelte C#-Blöcke. Weitere Informationen finden Sie unter Benannte C#-Variablen und geschachtelte Blöcke generieren fehlerhaften Code.

Variablen

Eine Variable ist ein benanntes Objekt, das Sie zum Speichern von Daten verwenden. Sie können Variablen beliebig benennen, aber der Name muss mit einem alphabetischen Zeichen beginnen und darf keine Leerzeichen oder reservierten Zeichen enthalten.

Variablen und Datentypen

Eine Variable kann einen bestimmten Datentyp aufweisen, der angibt, welche Art von Daten in der Variablen gespeichert sind. Sie können Zeichenfolgenvariablen verwenden, die Zeichenfolgenwerte (z. B. "Hello world"), ganzzahlige Variablen, die Ganze Zahlenwerte (z. B. 3 oder 79) speichern, und Datumsvariablen, die Datumswerte in verschiedenen Formaten speichern (z. B. 4/12/2012 oder März 2009). Und es gibt viele andere Datentypen, die Sie verwenden können.

In der Regel müssen Sie jedoch keinen Typ für eine Variable angeben. Meistens können ASP.NET den Typ basierend darauf ermitteln, wie die Daten in der Variablen verwendet werden. (Gelegentlich müssen Sie einen Typ angeben. Es werden Beispiele angezeigt, in denen dies der Fall ist.)

Sie deklarieren eine Variable mithilfe des var Schlüsselwort (keyword) (wenn Sie keinen Typ angeben möchten) oder verwenden sie den Namen des Typs:

@{
    // Assigning a string to a variable.
    var greeting = "Welcome!";

    // Assigning a number to a variable.
    var theCount = 3;

    // Assigning an expression to a variable.
    var monthlyTotal = theCount + 5;

    // Assigning a date value to a variable.
    var today = DateTime.Today;

    // Assigning the current page's URL to a variable.
    var myPath = this.Request.Url;

    // Declaring variables using explicit data types.
    string name = "Joe";
    int count = 5;
    DateTime tomorrow = DateTime.Now.AddDays(1);
}

Das folgende Beispiel zeigt einige typische Verwendungen von Variablen auf einer Webseite:

@{
    // Embedding the value of a variable into HTML markup.
    <p>@greeting, friends!</p>

    // Using variables as part of an inline expression.
    <p>The predicted annual total is: @( monthlyTotal * 12)</p>

    // Displaying the page URL with a variable.
    <p>The URL to this page is: @myPath</p>
}

Wenn Sie die vorherigen Beispiele auf einer Seite kombinieren, wird dies in einem Browser angezeigt:

Razor-Img9

Konvertieren und Testen von Datentypen

Obwohl ASP.NET einen Datentyp in der Regel automatisch bestimmen können, kann er dies manchmal nicht. Daher müssen Sie möglicherweise ASP.NET, indem Sie eine explizite Konvertierung durchführen. Auch wenn Sie keine Typen konvertieren müssen, ist es manchmal hilfreich, zu testen, mit welchem Datentyp Sie möglicherweise arbeiten.

Der häufigste Fall ist, dass Sie eine Zeichenfolge in einen anderen Typ konvertieren müssen, z. B. in eine ganze Zahl oder ein Datum. Das folgende Beispiel zeigt einen typischen Fall, in dem Sie eine Zeichenfolge in eine Zahl konvertieren müssen.

@{
    var total = 0;

    if(IsPost) {
        // Retrieve the numbers that the user entered.
        var num1 = Request["text1"];
        var num2 = Request["text2"];
        // Convert the entered strings into integers numbers and add.
        total = num1.AsInt() + num2.AsInt();
    }
}

Benutzereingaben werden in der Regel als Zeichenfolgen angezeigt. Selbst wenn Sie Benutzer aufgefordert haben, eine Zahl einzugeben, und selbst wenn sie eine Ziffer eingegeben haben, befinden sich die Daten im Zeichenfolgenformat, wenn Benutzereingaben übermittelt und Sie sie im Code lesen. Daher müssen Sie die Zeichenfolge in eine Zahl konvertieren. Wenn Sie im Beispiel versuchen, Arithmetik für die Werte auszuführen, ohne sie zu konvertieren, ergibt sich der folgende Fehler, da ASP.NET keine zwei Zeichenfolgen hinzufügen können:

Der Typ "string" kann nicht implizit in "int" konvertiert werden.

Um die Werte in ganze Zahlen zu konvertieren, rufen Sie die -Methode auf AsInt . Wenn die Konvertierung erfolgreich war, können Sie die Zahlen hinzufügen.

In der folgenden Tabelle sind einige gängige Konvertierungs- und Testmethoden für Variablen aufgeführt.

Methode

Beschreibung

Beispiel


AsInt(), IsInt()

Konvertiert eine Zeichenfolge, die eine ganze Zahl (z. B. "593") darstellt, in eine ganze Zahl.

var myIntNumber = 0;
var myStringNum = "539";
if(myStringNum.IsInt()==true){
    myIntNumber = myStringNum.AsInt();
}

AsBool(), IsBool()

Konvertiert eine Zeichenfolge wie "true" oder "false" in einen booleschen Typ.

var myStringBool = "True";
var myVar = myStringBool.AsBool();

AsFloat(), IsFloat()

Konvertiert eine Zeichenfolge mit einem Dezimalwert wie "1.3" oder "7.439" in eine Gleitkommazahl.

var myStringFloat = "41.432895";
var myFloatNum = myStringFloat.AsFloat();

AsDecimal(), IsDecimal()

Konvertiert eine Zeichenfolge mit einem Dezimalwert wie "1.3" oder "7.439" in eine Dezimalzahl. (In ASP.NET ist eine Dezimalzahl präziser als eine Gleitkommazahl.)

var myStringDec = "10317.425";
var myDecNum = myStringDec.AsDecimal();

AsDateTime(), IsDateTime()

Konvertiert eine Zeichenfolge, die einen Datums- und Uhrzeitwert darstellt, in den ASP.NET-Typ DateTime .

var myDateString = "12/27/2012";
var newDate = myDateString.AsDateTime();

ToString()

Konvertiert jeden anderen Datentyp in eine Zeichenfolge.

int num1 = 17;
int num2 = 76;
// myString is set to 1776
string myString = num1.ToString() +
  num2.ToString();

Operatoren

Ein Operator ist ein Schlüsselwort (keyword) oder Zeichen, das ASP.NET angibt, welche Art von Befehl in einem Ausdruck ausgeführt werden soll. Die C#-Sprache (und die razor-Syntax, die darauf basiert) unterstützt viele Operatoren, aber Sie müssen nur einige erkennen, um zu beginnen. In der folgenden Tabelle sind die gängigsten Operatoren zusammengefasst.

Operator

Beschreibung

Beispiele


+ - * /

Mathematische Operatoren, die in numerischen Ausdrücken verwendet werden.

@(5 + 13)
@{ var netWorth = 150000; }
@{ var newTotal = netWorth * 2; }
@(newTotal / 2)

=

Zuweisung. Weist den Wert auf der rechten Seite einer Anweisung dem Objekt auf der linken Seite zu.

var age = 17;

==

Gleichheit. Gibt zurück true , wenn die Werte gleich sind. (Beachten Sie die Unterscheidung zwischen dem = Operator und dem == Operator.)

var myNum = 15;
if (myNum == 15) {
    // Do something.
}

!=

Ungleichheit. Gibt zurück true , wenn die Werte nicht gleich sind.

var theNum = 13;
if (theNum != 15) {
    // Do something.
}

< > <= >=

Kleiner als, größer als, kleiner oder gleich und größer als oder gleich.

if (2 < 3) {
    // Do something.
}
var currentCount = 12;
if(currentCount >= 12) {
    // Do something.
}

+

Verkettung, die zum Verknüpfen von Zeichenfolgen verwendet wird. ASP.NET kennt den Unterschied zwischen diesem Operator und dem Additionsoperator basierend auf dem Datentyp des Ausdrucks.

// The displayed result is "abcdef".
@("abc" + "def")

+= -=

Die Inkrement- und Dekrementoperatoren, die 1 (bzw.) von einer Variablen hinzufügen und subtrahieren.

int theCount = 0;
theCount += 1; // Adds 1 to count

.

Punkt. Wird verwendet, um Objekte und ihre Eigenschaften und Methoden zu unterscheiden.

var myUrl = Request.Url;
var count = Request["Count"].AsInt();

()

Klammern: Wird zum Gruppieren von Ausdrücken und zum Übergeben von Parametern an Methoden verwendet.

@(3 + 7)
@Request.MapPath(Request.FilePath);

[]

Klammern. Wird für den Zugriff auf Werte in Arrays oder Sammlungen verwendet.

var income = Request["AnnualIncome"];

!

Nicht. Kehrt einen true Wert in und false umgekehrt um. Wird in der Regel als Kurzform zum Testen für false (d. a. nicht true) verwendet.

bool taskCompleted = false;
// Processing.
if(!taskCompleted) {
    // Continue processing
}

&& ||

Logisches AND und OR, die verwendet werden, um Bedingungen miteinander zu verknüpfen.

bool myTaskCompleted = false;
int totalCount = 0;
// Processing.
if(!myTaskCompleted && totalCount < 12) {
    // Continue processing.
}

Arbeiten mit Datei- und Ordnerpfaden im Code

Sie arbeiten häufig mit Datei- und Ordnerpfaden in Ihrem Code. Hier sehen Sie ein Beispiel für eine physische Ordnerstruktur für eine Website, wie sie möglicherweise auf Ihrem Entwicklungscomputer angezeigt wird:

C:\WebSites\MyWebSite default.cshtml datafile.txt \images Logo.jpg \styles Styles.css

Hier sind einige wichtige Details zu URLs und Pfaden:

  • Eine URL beginnt mit einem Domänennamen (http://www.example.com) oder einem Servernamen (http://localhost, http://mycomputer).
  • Eine URL entspricht einem physischen Pfad auf einem Hostcomputer. Kann beispielsweise http://myserver dem Ordner C:\websites\mywebsite auf dem Server entsprechen.
  • Ein virtueller Pfad ist eine Abkürzung, um Pfade im Code darzustellen, ohne den vollständigen Pfad angeben zu müssen. Sie enthält den Teil einer URL, der dem Domänen- oder Servernamen folgt. Wenn Sie virtuelle Pfade verwenden, können Sie Ihren Code in eine andere Domäne oder einen anderen Server verschieben, ohne die Pfade aktualisieren zu müssen.

Hier sehen Sie ein Beispiel, das Ihnen hilft, die Unterschiede zu verstehen:

Vollständige URL http://mycompanyserver/humanresources/CompanyPolicy.htm
Servername mycompanyserver
Virtueller Pfad /humanresources/CompanyPolicy.htm
Physischer Pfad C:\mywebsites\humanresources\CompanyPolicy.htm

Der virtuelle Stamm ist /, genau wie der Stamm Ihres Laufwerks C: ist . (Pfade virtueller Ordner verwenden immer Schrägstriche.) Der virtuelle Pfad eines Ordners muss nicht denselben Namen wie der physische Ordner haben. Es kann sich um einen Alias handelt. (Auf Produktionsservern entspricht der virtuelle Pfad selten einem exakten physischen Pfad.)

Wenn Sie mit Dateien und Ordnern im Code arbeiten, müssen Sie manchmal auf den physischen Pfad und manchmal auf einen virtuellen Pfad verweisen, je nachdem, mit welchen Objekten Sie arbeiten. ASP.NET bietet Ihnen die folgenden Tools zum Arbeiten mit Datei- und Ordnerpfaden im Code: die Server.MapPath -Methode, den Operator und Href die ~ -Methode.

Konvertieren virtueller in physische Pfade: die Server.MapPath-Methode

Die Server.MapPath Methode konvertiert einen virtuellen Pfad (wie /default.cshtml) in einen absoluten physischen Pfad (z. B. C:\WebSites\MyWebSiteFolder\default.cshtml). Sie verwenden diese Methode jederzeit, wenn Sie einen vollständigen physischen Pfad benötigen. Ein typisches Beispiel ist, wenn Sie eine Textdatei oder Bilddatei auf dem Webserver lesen oder schreiben.

Sie kennen in der Regel nicht den absoluten physischen Pfad Ihrer Website auf dem Server einer Hostingwebsite, sodass diese Methode den ihnen bekannte Pfad – den virtuellen Pfad – in den entsprechenden Pfad auf dem Server für Sie konvertieren kann. Sie übergeben den virtuellen Pfad an eine Datei oder einen Ordner an die -Methode, und sie gibt den physischen Pfad zurück:

@{
    var dataFilePath = "~/dataFile.txt";
}
<!-- Displays a physical path C:\Websites\MyWebSite\datafile.txt  -->
<p>@Server.MapPath(dataFilePath)</p>

Verweisen auf den virtuellen Stamm: der ~ -Operator und die Href-Methode

In einer CSHTML - oder VBHTML-Datei können Sie mithilfe des -Operators auf den ~ virtuellen Stammpfad verweisen. Dies ist sehr praktisch, da Sie Seiten auf einer Website verschieben können und alle Links, die sie zu anderen Seiten enthalten, nicht unterbrochen werden. Es ist auch praktisch, wenn Sie Ihre Website jemals an einen anderen Ort verschieben. Im Folgenden finden Sie einige Beispiele:

@{
    var myImagesFolder = "~/images";
    var myStyleSheet = "~/styles/StyleSheet.css";
}

Wenn die Website ist http://myserver/myapp, behandeln ASP.NET diese Pfade, wenn die Seite ausgeführt wird:

  • myImagesFolder: http://myserver/myapp/images
  • myStyleSheet : http://myserver/myapp/styles/Stylesheet.css

(Diese Pfade werden nicht als Werte der Variablen angezeigt, aber ASP.NET behandeln die Pfade so, als ob sie das wären.)

Sie können den ~ Operator wie folgt sowohl im Servercode (wie oben) als auch im Markup verwenden:

<!-- Examples of using the ~ operator in markup in ASP.NET Web Pages -->

<a href="~/Default">Home</a>
<img src="~/images/MyImages.png" />

Im Markup verwenden Sie den ~ Operator, um Pfade zu Ressourcen wie Bilddateien, anderen Webseiten und CSS-Dateien zu erstellen. Wenn die Seite ausgeführt wird, durchläuft ASP.NET die Seite (sowohl Code als auch Markup) und löst alle ~ Verweise auf den entsprechenden Pfad auf.

Bedingte Logik und Schleifen

ASP.NET Servercode können Sie Aufgaben basierend auf Bedingungen ausführen und Code schreiben, der Anweisungen eine bestimmte Anzahl von Wiederholungen wiederholt (d. b. Code, der eine Schleife ausführt).

Testbedingungen

Zum Testen einer einfachen Bedingung verwenden Sie die if -Anweisung, die basierend auf einem von Ihnen angegebenen Test true oder false zurückgibt:

@{
  var showToday = true;
  if(showToday)
  {
    @DateTime.Today;
  }
}

Die if Schlüsselwort (keyword) startet einen Block. Der tatsächliche Test (Bedingung) befindet sich in Klammern und gibt true oder false zurück. Die Anweisungen, die ausgeführt werden, wenn der Test true ist, werden in geschweifte Klammern eingeschlossen. Eine if -Anweisung kann einen else -Block enthalten, der Anweisungen angibt, die ausgeführt werden sollen, wenn die Bedingung false ist:

@{
  var showToday = false;
  if(showToday)
  {
    @DateTime.Today;
  }
  else
  {
    <text>Sorry!</text>
  }
}

Sie können mehrere Bedingungen mithilfe eines else if -Blocks hinzufügen:

@{
    var theBalance = 4.99;
    if(theBalance == 0)
    {
        <p>You have a zero balance.</p>
    }
    else if (theBalance  > 0 && theBalance <= 5)
    {
        <p>Your balance of $@theBalance is very low.</p>
    }
    else
    {
        <p>Your balance is: $@theBalance</p>
    }
}

Wenn in diesem Beispiel die erste Bedingung im if-Block nicht true ist, wird die else if Bedingung überprüft. Wenn diese Bedingung erfüllt ist, werden die Anweisungen im else if Block ausgeführt. Wenn keine der Bedingungen erfüllt ist, werden die Anweisungen im else Block ausgeführt. Sie können eine beliebige Anzahl von anderen If-Blöcken hinzufügen und dann mit einem else -Block als "alles andere" -Bedingung schließen.

Verwenden Sie einen switch -Block, um eine große Anzahl von Bedingungen zu testen:

@{
    var weekday = "Wednesday";
    var greeting = "";

    switch(weekday)
    {
        case "Monday":
            greeting = "Ok, it's a marvelous Monday";
            break;
        case "Tuesday":
            greeting = "It's a tremendous Tuesday";
            break;
        case "Wednesday":
            greeting = "Wild Wednesday is here!";
            break;
        default:
            greeting = "It's some other day, oh well.";
            break;
    }

    <p>Since it is @weekday, the message for today is: @greeting</p>
}

Der zu testde Wert befindet sich in Klammern (im Beispiel die weekday Variable). Jeder einzelne Test verwendet eine case -Anweisung, die mit einem Doppelpunkt (:) endet. Wenn der Wert einer case Anweisung mit dem Testwert übereinstimmt, wird der Code in diesem Fall block ausgeführt. Sie schließen jede Fallanweisung mit einer break -Anweisung. (Wenn Sie vergessen, die Unterbrechung in jeden case Block einzuschließen, wird auch der Code aus der nächsten case Anweisung ausgeführt.) Ein switch Block verfügt häufig über eine default -Anweisung als letzter Fall für eine Option "Alles andere", die ausgeführt wird, wenn keiner der anderen Fälle zutrifft.

Das Ergebnis der letzten beiden bedingten Blöcke, die in einem Browser angezeigt werden:

Razor-Img10

Schleifencode

Häufig müssen dieselben Anweisungen wiederholt ausgeführt werden. Dazu führen Sie eine Schleife aus. Beispielsweise führen Sie häufig dieselben Anweisungen für jedes Element in einer Sammlung von Daten aus. Wenn Sie genau wissen, wie oft Sie eine Schleife ausführen möchten, können Sie eine for Schleife verwenden. Diese Art von Schleife ist besonders nützlich für das Auf- oder Herunterzählen:

@for(var i = 10; i < 21; i++)
{
    <p>Line #: @i</p>
}

Die Schleife beginnt mit dem for Schlüsselwort (keyword), gefolgt von drei Anweisungen in Klammern, die jeweils mit einem Semikolon beendet werden.

  • Innerhalb der Klammern erstellt die erste Anweisung (var i=10;) einen Zähler und initialisiert ihn auf 10. Sie müssen den Zähler i nicht benennen– Sie können eine beliebige Variable verwenden. Wenn die for Schleife ausgeführt wird, wird der Indikator automatisch erhöht.
  • Die zweite Anweisung (i < 21;) legt die Bedingung dafür fest, wie weit Sie zählen möchten. In diesem Fall soll es maximal 20 sein (d. a. weitermachen, während der Zähler kleiner als 21 ist).
  • Die dritte Anweisung (i++ ) verwendet einen Inkrementoperator, der einfach angibt, dass dem Zähler bei jeder Ausführung der Schleife 1 hinzugefügt werden soll.

Innerhalb der geschweiften Klammern befindet sich der Code, der für jede Iteration der Schleife ausgeführt wird. Das Markup erstellt jedes Mal einen neuen Absatz (<p> Element) und fügt der Ausgabe eine Zeile hinzu, die den Wert von i (der Zähler) anzeigt. Wenn Sie diese Seite ausführen, werden im Beispiel 11 Zeilen erstellt, in denen die Ausgabe angezeigt wird, wobei der Text in jeder Zeile die Elementnummer angibt.

Razor-Img11

Wenn Sie mit einer Sammlung oder einem Array arbeiten, verwenden Sie häufig eine foreach Schleife. Eine Auflistung ist eine Gruppe ähnlicher Objekte, und mit der foreach Schleife können Sie eine Aufgabe für jedes Element in der Auflistung ausführen. Diese Art von Schleife ist für Sammlungen geeignet, da Sie im Gegensatz zu einer for Schleife den Zähler nicht erhöhen oder ein Limit festlegen müssen. Stattdessen wird der foreach Schleifencode einfach durch die Auflistung fortgesetzt, bis er fertig ist.

Der folgende Code gibt beispielsweise die Elemente in der Auflistung zurück, bei der Request.ServerVariables es sich um ein Objekt handelt, das Informationen zu Ihrem Webserver enthält. Es verwendet eine foreac h-Schleife, um den Namen jedes Elements anzuzeigen, indem ein neues <li> Element in einer HTML-Aufzählung erstellt wird.

<ul>
@foreach (var myItem in Request.ServerVariables)
{
    <li>@myItem</li>
}
</ul>

Auf foreach die Schlüsselwort (keyword) folgen Klammern, in denen Sie eine Variable deklarieren, die ein einzelnes Element in der Auflistung darstellt (im Beispiel), var itemgefolgt von der in Schlüsselwort (keyword), gefolgt von der Auflistung, durch die Sie eine Schleife durchlaufen möchten. Im Textkörper der foreach Schleife können Sie mithilfe der zuvor deklarierten Variablen auf das aktuelle Element zugreifen.

Razor-Img12

Verwenden Sie die while -Anweisung, um eine allgemeinere Schleife zu erstellen:

@{
    var countNum = 0;
    while (countNum < 50)
    {
        countNum += 1;
        <p>Line #@countNum: </p>
    }
}

Eine while Schleife beginnt mit dem while Schlüsselwort (keyword), gefolgt von Klammern, in denen Sie angeben, wie lange die Schleife fortgesetzt wird (hier, solange countNum kleiner als 50 ist), und dann der zu wiederholende Block. Schleifen in der Regel inkrementieren (hinzufügen zu) oder dekrementieren (subtrahieren von) eine Variable oder ein Objekt, die zum Zählen verwendet wird. Im Beispiel fügt der += Operator bei jeder Ausführung der Schleife 1 hinzu countNum . (Um eine Variable in einer Schleife zu dekrementieren, die nach unten zählt, würden Sie den Dekrementoperator -=verwenden.

Objekte und Auflistungen

Fast alles in einer ASP.NET Website ist ein Objekt, einschließlich der Webseite selbst. In diesem Abschnitt werden einige wichtige Objekte erläutert, mit denen Sie häufig in Ihrem Code arbeiten werden.

Page-Objekte

Das grundlegendste Objekt in ASP.NET ist die Seite. Sie können direkt ohne qualifizierendes Objekt auf Eigenschaften des Seitenobjekts zugreifen. Der folgende Code ruft den Dateipfad der Seite mithilfe des Request -Objekts der Seite ab:

@{
    var path = Request.FilePath;
}

Um deutlich zu machen, dass Sie auf Eigenschaften und Methoden im aktuellen Seitenobjekt verweisen, können Sie optional die Schlüsselwort (keyword) this verwenden, um das Seitenobjekt im Code darzustellen. Hier sehen Sie das vorherige Codebeispiel mit this hinzugefügt, um die Seite darzustellen:

@{
    var path = this.Request.FilePath;
}

Sie können Eigenschaften des Page -Objekts verwenden, um viele Informationen abzurufen, z. B.:

  • Request. Wie Sie bereits gesehen haben, ist dies eine Sammlung von Informationen über die aktuelle Anforderung, einschließlich des Typs des Browsers, der die Anforderung gestellt hat, der URL der Seite, der Benutzeridentität usw.

  • Response. Dies ist eine Sammlung von Informationen über die Antwort (Seite), die an den Browser gesendet wird, wenn die Ausführung des Servercodes beendet ist. Beispielsweise können Sie diese Eigenschaft verwenden, um Informationen in die Antwort zu schreiben.

    @{
        // Access the page's Request object to retrieve the Url.
        var pageUrl = this.Request.Url;
    }
    <a href="@pageUrl">My page</a>
    

Sammlungsobjekte (Arrays und Wörterbücher)

Eine Auflistung ist eine Gruppe von Objekten desselben Typs, z. B. eine Auflistung von Customer Objekten aus einer Datenbank. ASP.NET enthält viele integrierte Sammlungen, z. B. die Request.Files Auflistung.

Sie arbeiten häufig mit Daten in Sammlungen. Zwei gängige Auflistungstypen sind das Array und das Wörterbuch. Ein Array ist nützlich, wenn Sie eine Sammlung ähnlicher Elemente speichern möchten, aber keine separate Variable erstellen möchten, die jedes Element enthält:

@* Array block 1: Declaring a new array using braces. *@
@{
    <h3>Team Members</h3>
    string[] teamMembers = {"Matt", "Joanne", "Robert", "Nancy"};
    foreach (var person in teamMembers)
    {
        <p>@person</p>
    }
}

Mit Arrays deklarieren Sie einen bestimmten Datentyp, z string. B. , intoder DateTime. Um anzugeben, dass die Variable ein Array enthalten kann, fügen Sie der Deklaration Klammern hinzu (z string[] . B. oder int[]). Sie können auf Elemente in einem Array mithilfe ihrer Position (Index) oder mithilfe der foreach -Anweisung zugreifen. Arrayindizes sind nullbasiert, d. h. das erste Element befindet sich an Position 0, das zweite Element an Position 1 usw.

@{
    string[] teamMembers = {"Matt", "Joanne", "Robert", "Nancy"};
    <p>The number of names in the teamMembers array: @teamMembers.Length </p>
    <p>Robert is now in position: @Array.IndexOf(teamMembers, "Robert")</p>
    <p>The array item at position 2 (zero-based) is @teamMembers[2]</p>
    <h3>Current order of team members in the list</h3>
    foreach (var name in teamMembers)
    {
        <p>@name</p>
    }
    <h3>Reversed order of team members in the list</h3>
    Array.Reverse(teamMembers);
    foreach (var reversedItem in teamMembers)
    {
        <p>@reversedItem</p>
    }
}

Sie können die Anzahl der Elemente in einem Array ermitteln, indem Sie dessen Length -Eigenschaft abrufen. Verwenden Array.IndexOf Sie die -Methode, um die Position eines bestimmten Elements im Array abzurufen (um das Array zu durchsuchen). Sie können auch Dinge tun, wie den Inhalt eines Arrays (die Array.Reverse -Methode) umzukehren oder den Inhalt (die Array.Sort -Methode) zu sortieren.

Die Ausgabe des in einem Browser angezeigten Zeichenfolgenarraycodes:

Razor-Img13

Ein Wörterbuch ist eine Sammlung von Schlüssel-Wert-Paaren, bei denen Sie den Schlüssel (oder Namen) angeben, um den entsprechenden Wert festzulegen oder abzurufen:

@{
    var myScores = new Dictionary<string, int>();
    myScores.Add("test1", 71);
    myScores.Add("test2", 82);
    myScores.Add("test3", 100);
    myScores.Add("test4", 59);
}
<p>My score on test 3 is: @myScores["test3"]%</p>
@{myScores["test4"] = 79;}
<p>My corrected score on test 4 is: @myScores["test4"]%</p>

Um ein Wörterbuch zu erstellen, verwenden Sie die new Schlüsselwort (keyword), um anzugeben, dass Sie ein neues Wörterbuchobjekt erstellen. Sie können einer Variablen mithilfe der var Schlüsselwort (keyword) ein Wörterbuch zuweisen. Sie geben die Datentypen der Elemente im Wörterbuch mithilfe von spitzen Klammern ( < > ) an. Am Ende der Deklaration müssen Sie ein Paar von Klammern hinzufügen, da dies eigentlich eine Methode ist, die ein neues Wörterbuch erstellt.

Um dem Wörterbuch Elemente hinzuzufügen, können Sie die Add -Methode der Wörterbuchvariable (myScores in diesem Fall) aufrufen und dann einen Schlüssel und einen Wert angeben. Alternativ können Sie eckige Klammern verwenden, um den Schlüssel anzugeben und eine einfache Zuweisung auszuführen, wie im folgenden Beispiel gezeigt:

myScores["test4"] = 79;

Um einen Wert aus dem Wörterbuch abzurufen, geben Sie den Schlüssel in Klammern an:

var testScoreThree = myScores["test3"];

Aufrufen von Methoden mit Parametern

Wie Sie weiter oben in diesem Artikel gelesen haben, können die Objekte, mit denen Sie programmieren, Methoden aufweisen. Ein Objekt kann beispielsweise Database über eine Database.Connect -Methode verfügen. Viele Methoden verfügen auch über einen oder mehrere Parameter. Ein Parameter ist ein Wert, den Sie an eine Methode übergeben, damit die Methode ihre Aufgabe abschließen kann. Sehen Sie sich beispielsweise eine Deklaration für die Request.MapPath -Methode an, die drei Parameter akzeptiert:

public string MapPath(string virtualPath, string baseVirtualDir, 
    bool allowCrossAppMapping);

(Die Zeile wurde umschlossen, um sie besser lesbar zu machen. Denken Sie daran, dass Sie Zeilenumbrüche fast an jeder Beliebigen Stelle einfügen können, außer innerhalb von Zeichenfolgen, die in Anführungszeichen eingeschlossen sind.)

Diese Methode gibt den physischen Pfad auf dem Server zurück, der einem angegebenen virtuellen Pfad entspricht. Die drei Parameter für die -Methode sind virtualPath, baseVirtualDirund allowCrossAppMapping. (Beachten Sie, dass die Parameter in der Deklaration mit den Datentypen der Daten aufgeführt sind, die sie akzeptieren.) Wenn Sie diese Methode aufrufen, müssen Sie Werte für alle drei Parameter angeben.

Die Razor-Syntax bietet Ihnen zwei Optionen zum Übergeben von Parametern an eine Methode: Positionsparameter und benannte Parameter. Um eine Methode mithilfe von Positionsparametern aufzurufen, übergeben Sie die Parameter in einer strengen Reihenfolge, die in der Methodendeklaration angegeben ist. (In der Regel kennen Sie diese Reihenfolge, indem Sie die Dokumentation für die -Methode lesen.) Sie müssen der Reihenfolge folgen, und Sie können keinen der Parameter überspringen. Bei Bedarf übergeben Sie eine leere Zeichenfolge ("") oder null für einen Positionsparameter, für den Sie keinen Wert haben.

Im folgenden Beispiel wird davon ausgegangen, dass Sie auf Ihrer Website über einen Ordner namens scripts verfügen. Der Code ruft die Request.MapPath -Methode auf und übergibt Werte für die drei Parameter in der richtigen Reihenfolge. Anschließend wird der resultierende zugeordnete Pfad angezeigt.

@{
    // Pass parameters to a method using positional parameters.
    var myPathPositional = Request.MapPath("/scripts", "/", true);
}
<p>@myPathPositional</p>

Wenn eine Methode über viele Parameter verfügt, können Sie ihren Code besser lesbar halten, indem Sie benannte Parameter verwenden. Um eine Methode mit benannten Parametern aufzurufen, geben Sie den Parameternamen gefolgt von einem Doppelpunkt (:) und dann den Wert an. Der Vorteil benannter Parameter besteht darin, dass Sie sie in beliebiger Reihenfolge übergeben können. (Ein Nachteil ist, dass der Methodenaufruf nicht so kompakt ist.)

Im folgenden Beispiel wird dieselbe Methode wie oben aufgerufen, es werden jedoch benannte Parameter verwendet, um die Werte anzugeben:

@{
    // Pass parameters to a method using named parameters.
    var myPathNamed = Request.MapPath(baseVirtualDir: "/", 
        allowCrossAppMapping: true, virtualPath: "/scripts");
}
<p>@myPathNamed</p>

Wie Sie sehen können, werden die Parameter in einer anderen Reihenfolge übergeben. Wenn Sie jedoch das vorherige Beispiel und dieses Beispiel ausführen, geben sie den gleichen Wert zurück.

Behandeln von Fehlern

Try-Catch-Anweisungen

Sie haben häufig Anweisungen im Code, die aus Gründen außerhalb Ihrer Kontrolle fehlschlagen können. Zum Beispiel:

  • Wenn Ihr Code versucht, eine Datei zu erstellen oder darauf zuzugreifen, können alle Arten von Fehlern auftreten. Die gewünschte Datei ist möglicherweise nicht vorhanden, sie ist möglicherweise gesperrt, der Code verfügt möglicherweise über keine Berechtigungen usw.
  • Wenn Ihr Code versucht, Datensätze in einer Datenbank zu aktualisieren, kann es zu Berechtigungsproblemen kommen, die Verbindung mit der Datenbank kann unterbrochen werden, die zu speichernden Daten können ungültig sein usw.

In der Programmierung werden diese Situationen als Ausnahmen bezeichnet. Wenn ihr Code auf eine Ausnahme stößt, wird eine Fehlermeldung generiert (ausgelöst), die für Benutzer bestenfalls störend ist:

Razor-Img14

In Situationen, in denen Ihr Code möglicherweise auf Ausnahmen stößt, und um Fehlermeldungen dieses Typs zu vermeiden, können Sie -Anweisungen verwenden try/catch . In der try -Anweisung führen Sie den Code aus, den Sie überprüfen. In einer oder mehreren catch Anweisungen können Sie nach bestimmten Fehlern (bestimmte Arten von Ausnahmen) suchen, die möglicherweise aufgetreten sind. Sie können so viele catch Anweisungen einschließen, wie Sie benötigen, um nach fehlern zu suchen, die Sie erwarten.

Hinweis

Es wird empfohlen, die Verwendung der Response.Redirect -Methode in try/catch -Anweisungen zu vermeiden, da dies eine Ausnahme auf Ihrer Seite verursachen kann.

Das folgende Beispiel zeigt eine Seite, die eine Textdatei für die erste Anforderung erstellt und dann eine Schaltfläche anzeigt, mit der der Benutzer die Datei öffnen kann. Im Beispiel wird absichtlich ein ungültiger Dateiname verwendet, sodass eine Ausnahme ausgelöst wird. Der Code enthält catch Anweisungen für zwei mögliche Ausnahmen: FileNotFoundException, die auftreten, wenn der Dateiname ungültig ist, und DirectoryNotFoundException, was auftritt, wenn ASP.NET den Ordner nicht einmal finden kann. (Sie können die Auskommentierung einer Anweisung im Beispiel aufheben, um zu sehen, wie sie ausgeführt wird, wenn alles ordnungsgemäß funktioniert.)

Wenn Ihr Code die Ausnahme nicht behandelt hat, wird eine Fehlerseite wie im vorherigen Screenshot angezeigt. Der Abschnitt hilft jedoch, zu verhindern, try/catch dass der Benutzer diese Fehlertypen sieht.

@{
    var dataFilePath = "~/dataFile.txt";
    var fileContents = "";
    var physicalPath = Server.MapPath(dataFilePath);
    var userMessage = "Hello world, the time is " + DateTime.Now;
    var userErrMsg = "";
    var errMsg = "";

    if(IsPost)
    {
        // When the user clicks the "Open File" button and posts
        // the page, try to open the created file for reading.
        try {
            // This code fails because of faulty path to the file.
            fileContents = File.ReadAllText(@"c:\batafile.txt");

            // This code works. To eliminate error on page,
            // comment the above line of code and uncomment this one.
            //fileContents = File.ReadAllText(physicalPath);
        }
        catch (FileNotFoundException ex) {
            // You can use the exception object for debugging, logging, etc.
            errMsg = ex.Message;
            // Create a friendly error message for users.
            userErrMsg = "A file could not be opened, please contact "
                + "your system administrator.";
        }
        catch (DirectoryNotFoundException ex) {
            // Similar to previous exception.
            errMsg = ex.Message;
            userErrMsg = "A directory was not found, please contact "
                + "your system administrator.";
        }
    }
    else
    {
        // The first time the page is requested, create the text file.
        File.WriteAllText(physicalPath, userMessage);
    }
}

<!DOCTYPE html>
<html lang="en">
    <head>
        <meta charset="utf-8" />
        <title>Try-Catch Statements</title>
    </head>
    <body>
    <form method="POST" action="" >
      <input type="Submit" name="Submit" value="Open File"/>
    </form>

    <p>@fileContents</p>
    <p>@userErrMsg</p>

    </body>
</html>

Zusätzliche Ressourcen

Programmieren mit Visual Basic

Anhang: Visual Basic-Sprache und -Syntax

Referenzdokumentation

ASP.NET

Programmiersprache C#