Introduction to ASP.NET Web Programming Using the Razor Syntax (Visual Basic) (Présentation de la programmation Web ASP.NET à l'aide de la syntaxe Razor (Visual Basic)).
par Tom FitzMacken
Cet article vous donne une vue d’ensemble de la programmation avec pages Web ASP.NET à l’aide de la syntaxe Razor et de Visual Basic. ASP.NET est la technologie de Microsoft permettant d’exécuter des pages web dynamiques sur des serveurs web.
Ce que vous allez apprendre :
- Les 8 principaux conseils de programmation pour bien démarrer avec la programmation pages Web ASP.NET à l’aide de la syntaxe Razor.
- Concepts de programmation de base dont vous aurez besoin.
- Qu’est-ce que ASP.NET code de serveur et la syntaxe Razor est à propos.
Versions des logiciels
- pages Web ASP.NET (Razor) 3
Ce tutoriel fonctionne également avec pages Web ASP.NET 2.
La plupart des exemples d’utilisation de pages Web ASP.NET avec la syntaxe Razor utilisent C#. Mais la syntaxe Razor prend également en charge Visual Basic. Pour programmer une page web ASP.NET en Visual Basic, vous créez une page web avec une extension de nom de fichier .vbhtml , puis ajoutez du code Visual Basic. Cet article vous donne une vue d’ensemble de l’utilisation du langage et de la syntaxe Visual Basic pour créer ASP.NET pages web.
Remarque
Les modèles de site web par défaut pour Microsoft WebMatrix (boulangerie, galerie de photos et site de démarrage, etc.) sont disponibles dans les versions C# et Visual Basic. Vous pouvez installer les modèles Visual Basic par en tant que packages NuGet. Les modèles de site web sont installés dans le dossier racine de votre site dans un dossier nommé Modèles Microsoft.
Les 8 premiers conseils de programmation
Cette section répertorie quelques conseils que vous devez absolument connaître lorsque vous commencez à écrire ASP.NET code de serveur à l’aide de la syntaxe Razor.
1. Vous ajoutez du code à une page à l’aide du caractère @
Le @
caractère démarre les expressions inline, les blocs d’instruction unique et les blocs à plusieurs instructions :
<!-- Single statement blocks -->
@Code Dim total = 7 End Code
@Code Dim myMessage = "Hello World" End Code
<!-- Inline expressions -->
<p>The value of your account is: @total </p>
<p>The value of myMessage is: @myMessage</p>
<!-- Multi-statement block -->
@Code
Dim greeting = "Welcome to our site!"
Dim weekDay = DateTime.Now.DayOfWeek
Dim greetingMessage = greeting & " Today is: " & weekDay.ToString()
End Code
<p>The greeting is: @greetingMessage</p>
Résultat affiché dans un navigateur :
Conseil
Encodage HTML
Lorsque vous affichez du contenu dans une page à l’aide du @
caractère, comme dans les exemples précédents, ASP.NET encode la sortie au format HTML. Cela remplace les caractères HTML réservés (tels que <
et >
et &
) par des codes qui permettent aux caractères d’être affichés en tant que caractères dans une page web au lieu d’être interprétés comme des balises ou des entités HTML. Sans encodage HTML, la sortie de votre code serveur peut ne pas s’afficher correctement et exposer une page à des risques de sécurité.
Si votre objectif est de générer un balisage HTML qui affiche les balises en tant que balisage (par exemple <p></p>
pour un paragraphe ou <em></em>
pour mettre en évidence du texte), consultez la section Combinaison de texte, de balisage et de code dans des blocs de code plus loin dans cet article.
Pour plus d’informations sur l’encodage HTML, consultez Utilisation des formulaires HTML dans pages Web ASP.NET sites.
2. Vous entourez les blocs de code avec code... Code de fin
Un bloc de code comprend une ou plusieurs instructions de code et est entouré des mots clés Code
et End Code
. Placez la mot clé d’ouverture Code
immédiatement après le @
caractère. Il ne peut pas y avoir d’espace blanc entre eux.
<!-- Single statement block. -->
@Code
Dim theMonth = DateTime.Now.Month
End Code
<p>The numeric value of the current month: @theMonth</p>
<!-- Multi-statement block. -->
@Code
Dim outsideTemp = 79
Dim weatherMessage = "Hello, it is " & outsideTemp & " degrees."
End Code
<p>Today's weather: @weatherMessage</p>
Résultat affiché dans un navigateur :
3. À l’intérieur d’un bloc, vous terminez chaque instruction de code par un saut de ligne
Dans un bloc de code Visual Basic, chaque instruction se termine par un saut de ligne. (Plus loin dans l’article, vous verrez un moyen d’encapsuler une instruction de code longue en plusieurs lignes si nécessaire.)
<!-- Single statement block. -->
@Code
Dim theMonth = DateTime.Now.Month
End Code
<!-- Multi-statement block. -->
@Code
Dim outsideTemp = 79
Dim weatherMessage = "Hello, it is " & outsideTemp & " degrees."
End Code
<!-- An inline expression, so no line break needed. -->
<p>Today's weather: @weatherMessage</p>
4. Vous utilisez des variables pour stocker des valeurs
Vous pouvez stocker des valeurs dans une variable, notamment des chaînes, des nombres et des dates, etc. Vous créez une variable à l’aide de la Dim
mot clé. Vous pouvez insérer des valeurs de variable directement dans une page à l’aide de @
.
<!-- Storing a string -->
@Code
Dim welcomeMessage = "Welcome, new members!"
End Code
<p>@welcomeMessage</p>
<!-- Storing a date -->
@Code
Dim year = DateTime.Now.Year
End Code
<!-- Displaying a variable -->
<p>Welcome to our new members who joined in @year!</p>
Résultat affiché dans un navigateur :
5. Vous placez les valeurs de chaîne littérale entre guillemets doubles
Une chaîne est une séquence de caractères qui sont traités comme du texte. Pour spécifier une chaîne, vous la placez entre guillemets doubles :
@Code
Dim myString = "This is a string literal"
End Code
Pour incorporer des guillemets doubles dans une valeur de chaîne, insérez deux guillemets doubles. Si vous souhaitez que le guillemet double apparaisse une fois dans la sortie de la page, entrez-le comme ""
dans la chaîne entre guillemets et, si vous souhaitez qu’il apparaisse deux fois, entrez-le comme """"
dans la chaîne entre guillemets.
<!-- Embedding double quotation marks in a string -->
@Code
Dim myQuote = "The person said: ""Hello, today is Monday."""
End Code
<p>@myQuote</p>
Résultat affiché dans un navigateur :
6. Le code Visual Basic ne respecte pas la casse
Le langage Visual Basic ne respecte pas la casse. Les mots clés de programmation (comme Dim
, If
et True
) et les noms de variables (comme myString
, ou subTotal
) peuvent être écrits dans tous les cas.
Les lignes de code suivantes attribuent une valeur à la variable lastname
à l’aide d’un nom minuscule, puis affichent la valeur de la variable dans la page à l’aide d’un nom en majuscules.
@Code
Dim lastName = "Smith"
' Keywords like dim are also not case sensitive.
DIM someNumber = 7
End Code
<p>The value of the <code>lastName</code> variable is: @LASTNAME</p>
Résultat affiché dans un navigateur :
7. Une grande partie de votre codage implique l’utilisation d’objets
Un objet représente une chose avec laquelle vous pouvez programmer : une page, une zone de texte, un fichier, une image, une demande web, un e-mail, un enregistrement client (ligne de base de données), etc. Les objets ont des propriétés qui décrivent leurs caractéristiques : un objet zone de texte a une Text
propriété, un objet de requête a une Url
propriété, un message électronique a une From
propriété et un objet client a une FirstName
propriété. Les objets ont également des méthodes qui sont les « verbes » qu’ils peuvent exécuter. Les exemples incluent la méthode d’un Save
objet file, la méthode d’un Rotate
objet image et la méthode d’un Send
objet e-mail.
Vous travaillerez souvent avec l’objet Request
, qui vous donne des informations telles que les valeurs des champs de formulaire sur la page (zones de texte, etc.), le type de navigateur à l’origine de la demande, l’URL de la page, l’identité de l’utilisateur, etc. Cet exemple montre comment accéder aux propriétés de l’objet Request
et comment appeler la MapPath
méthode de l’objet Request
, ce qui vous donne le chemin absolu de la page sur le serveur :
<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>
Résultat affiché dans un navigateur :
8. Vous pouvez écrire du code qui prend des décisions
Une fonctionnalité clé des pages web dynamiques est que vous pouvez déterminer ce qu’il faut faire en fonction des conditions. La façon la plus courante de procéder consiste à utiliser l’instruction If
(et l’instruction facultative Else
).
@Code
Dim result = ""
If IsPost Then
result = "This page was posted using the Submit button."
Else
result = "This was the first request for this page."
End If
End Code
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="utf-8" />
<title>Write Code that Makes Decisions</title>
</head>
<body>
<form method="POST" action="" >
<input type="Submit" name="Submit" value="Submit"/>
<p>@result</p>
</form>
</body>
</html>
L’instruction If IsPost
est une méthode abrégée d’écriture If IsPost = True
. If
Outre les instructions, il existe plusieurs façons de tester des conditions, de répéter des blocs de code, etc. qui sont décrites plus loin dans cet article.
Résultat affiché dans un navigateur (après avoir cliqué sur Envoyer) :
Conseil
Méthodes HTTP GET et POST et propriété IsPost
Le protocole utilisé pour les pages web (HTTP) prend en charge un nombre très limité de méthodes (« verbes ») utilisées pour effectuer des requêtes au serveur. Les deux plus courantes sont GET, qui est utilisé pour lire une page, et POST, qui est utilisé pour envoyer une page. En général, la première fois qu’un utilisateur demande une page, la page est demandée à l’aide de GET. Si l’utilisateur remplit un formulaire, puis clique sur Envoyer, le navigateur envoie une requête POST au serveur.
Dans la programmation web, il est souvent utile de savoir si une page est demandée en tant que GET ou POST afin de savoir comment traiter la page. Dans pages Web ASP.NET, vous pouvez utiliser la IsPost
propriété pour voir si une requête est get ou POST. Si la requête est une requête POST, la IsPost
propriété retourne true et vous pouvez effectuer des opérations telles que lire les valeurs des zones de texte d’un formulaire. De nombreux exemples vous montrent comment traiter la page différemment en fonction de la valeur de IsPost
.
Exemple de code simple
Cette procédure vous montre comment créer une page qui illustre les techniques de programmation de base. Dans l’exemple, vous créez une page qui permet aux utilisateurs d’entrer deux nombres, puis il les ajoute et affiche le résultat.
Dans votre éditeur, créez un fichier et nommez-le AddNumbers.vbhtml.
Copiez le code et le balisage suivants dans la page, en remplaçant tout ce qui se trouve déjà dans la page.
@Code Dim total = 0 Dim totalMessage = "" if IsPost Then ' Retrieve the numbers that the user entered. Dim num1 = Request("text1") Dim num2 = Request("text2") ' Convert the entered strings into integers numbers and add. total = num1.AsInt() + num2.AsInt() totalMessage = "Total = " & total End If End Code <!DOCTYPE html> <html lang="en"> <head> <meta charset="utf-8" /> <title>Adding Numbers</title> <style type="text/css"> body {background-color: beige; font-family: Verdana, Ariel; margin: 50px; } form {padding: 10px; border-style: solid; width: 250px;} </style> </head> <body> <p>Enter two whole numbers and click <strong>Add</strong> to display the result.</p> <p></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>
Voici quelques points à noter :
- Le
@
caractère démarre le premier bloc de code de la page et précède latotalMessage
variable incorporée près du bas. - Le bloc en haut de la page est placé dans
Code...End Code
. - Les variables
total
,num1
,num2
ettotalMessage
stockent plusieurs nombres et une chaîne. - La valeur de chaîne littérale affectée à la
totalMessage
variable est entre guillemets doubles. - Étant donné que le code Visual Basic ne respecte pas la casse, lorsque la
totalMessage
variable est utilisée près du bas de la page, son nom doit uniquement correspondre à l’orthographe de la déclaration de variable en haut de la page. La casse n’a pas d’importance. - L’expression
num1.AsInt()
+num2.AsInt()
montre comment utiliser des objets et des méthodes. LaAsInt
méthode sur chaque variable convertit la chaîne entrée par un utilisateur en nombre entier (entier) qui peut être ajouté. - La
<form>
balise inclut unmethod="post"
attribut. Cela spécifie que lorsque l’utilisateur clique sur Ajouter, la page est envoyée au serveur à l’aide de la méthode HTTP POST. Lorsque la page est envoyée, le codeIf IsPost
prend la valeur true et le code conditionnel s’exécute, affichant le résultat de l’ajout des nombres.
- Le
Enregistrez la page et exécutez-la dans un navigateur. (Vérifiez que la page est sélectionnée dans l’espace de travail Fichiers avant de l’exécuter.) Entrez deux nombres entiers, puis cliquez sur le bouton Ajouter .
Langage et syntaxe Visual Basic
Plus tôt, vous avez vu un exemple de base montrant comment créer une page web ASP.NET et comment ajouter du code serveur au balisage HTML. Ici, vous allez apprendre les bases de l’utilisation de Visual Basic pour écrire ASP.NET code serveur à l’aide de la syntaxe Razor, c’est-à-dire les règles de langage de programmation.
Si vous avez de l’expérience avec la programmation (en particulier si vous avez utilisé C, C++, C#, Visual Basic ou JavaScript), une grande partie de ce que vous lisez ici vous sera familier. Vous devrez probablement vous familiariser uniquement avec la façon dont le code WebMatrix est ajouté au balisage dans les fichiers .vbhtml .
Combinaison de texte, de balisage et de code dans des blocs de code
Dans les blocs de code serveur, vous souhaiterez souvent générer du texte et du balisage dans la page. Si un bloc de code serveur contient du texte qui n’est pas du code et qui doit être affiché tel quelle, ASP.NET doit être en mesure de distinguer ce texte du code. Il existe plusieurs manières de procéder.
Placez le texte dans un élément de bloc HTML comme
<p></p>
ou<em></em>
:@If IsPost Then ' 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: </p> @DateTime.Now End If
L’élément HTML peut inclure du texte, des éléments HTML supplémentaires et des expressions de code serveur. Quand ASP.NET voit la balise HTML d’ouverture (par exemple,
<p>
), elle restitue tout l’élément et son contenu tels quels dans le navigateur (et résout les expressions de code serveur).Utilisez l’opérateur
@:
ou l’élément<text>
. Le@:
génère une seule ligne de contenu contenant du texte brut ou des balises HTML sans correspondance ; l’élément<text>
contient plusieurs lignes à la sortie. Ces options sont utiles lorsque vous ne souhaitez pas afficher un élément HTML dans le cadre de la sortie.@If IsPost Then ' Plain text followed by an unmatched HTML tag and server code. @:The time is: <br /> @DateTime.Now ' Server code and then plain text, matched tags, and more text. @DateTime.Now @:is the <em>current</em> time. End If
L’exemple suivant répète l’exemple précédent, mais utilise une seule paire de
<text>
balises pour inclure le texte à afficher.@If IsPost Then @<text> The time is: <br /> @DateTime.Now @DateTime.Now is the <em>current</em> time. </text> End If
Dans l’exemple suivant, les
<text>
balises et</text>
comportent trois lignes, qui ont toutes du texte non lié et des balises HTML sans correspondance (<br />
), ainsi que du code serveur et des balises HTML correspondantes. Là encore, vous pouvez également faire précéder chaque ligne individuellement de l’opérateur ; les@:
deux fonctionnent.@Code dim minTemp = 75 @<text>It is the month of @DateTime.Now.ToString("MMMM"), and it's a <em>great</em> day! <p>You can go swimming if it's at least @minTemp degrees.</p></text> End Code
Notes
Lorsque vous extrayez du texte comme indiqué dans cette section (à l’aide d’un élément HTML, de l’opérateur
@:
ou de l’élément<text>
), ASP.NET n’encode pas la sortie au format HTML. (Comme indiqué précédemment, ASP.NET encode la sortie des expressions de code serveur et des blocs de code serveur précédés de@
, sauf dans les cas particuliers indiqués dans cette section.)
Espace blanc
Les espaces supplémentaires dans une instruction (et en dehors d’un littéral de chaîne) n’affectent pas l’instruction :
@Code Dim personName = "Smith" End Code
Fractionner des instructions longues en plusieurs lignes
Vous pouvez diviser une instruction de code long en plusieurs lignes à l’aide du caractère _
de soulignement (appelé caractère de continuation en Visual Basic) après chaque ligne de code. Pour casser une instruction sur la ligne suivante, à la fin de la ligne, ajoutez un espace, puis le caractère de continuation. Continuez l’instruction sur la ligne suivante. Vous pouvez inclure des instructions dans autant de lignes que nécessaire pour améliorer la lisibilité. Les instructions suivantes sont les mêmes :
@Code
Dim familyName _
= "Smith"
End Code
@Code
Dim _
theName _
= _
"Smith"
End Code
Toutefois, vous ne pouvez pas encapsuler une ligne au milieu d’un littéral de chaîne. L’exemple suivant ne fonctionne pas :
@Code
' Doesn't work.
Dim test = "This is a long _
string"
End Code
Pour combiner une chaîne longue qui s’encapsule à plusieurs lignes, comme le code ci-dessus, vous devez utiliser l’opérateur de concaténation (&
), que vous verrez plus loin dans cet article.
Commentaires de code
Les commentaires vous permettent de laisser des notes pour vous-même ou pour d’autres personnes. Les commentaires de syntaxe Razor sont préfixés par @*
et se terminent par *@
.
@* A single-line comment is added like this example. *@
@*
This is a multiline code comment.
It can continue for any number of lines.
*@
Dans les blocs de code, vous pouvez utiliser les commentaires de syntaxe Razor, ou vous pouvez utiliser le caractère de commentaire Visual Basic ordinaire, qui est un guillemet unique ('
) préfixé à chaque ligne.
@Code
' You can make comments in blocks by just using ' before each line.
End Code
@Code
' There is no multi-line comment character in Visual Basic.
' You use a ' before each line you want to comment.
End Code
Variables
Une variable est un objet nommé que vous utilisez pour stocker des données. Vous pouvez nommer des variables n’importe quoi, mais le nom doit commencer par un caractère alphabétique et il ne peut pas contenir d’espaces blancs ou de caractères réservés. En Visual Basic, comme vous l’avez vu précédemment, la casse des lettres dans un nom de variable n’a pas d’importance.
Variables et types de données
Une variable peut avoir un type de données spécifique, qui indique le type de données qui est stocké dans la variable. Vous pouvez avoir des variables de chaîne qui stockent des valeurs de chaîne (comme « Hello world »), des variables entières qui stockent des valeurs de nombre entier (comme 3 ou 79) et des variables de date qui stockent des valeurs de date dans divers formats (comme le 12/04/2012 ou mars 2009). Et il existe de nombreux autres types de données que vous pouvez utiliser.
Toutefois, vous n’avez pas besoin de spécifier un type pour une variable. Dans la plupart des cas, ASP.NET pouvez déterminer le type en fonction de la façon dont les données de la variable sont utilisées. (Parfois, vous devez spécifier un type ; vous verrez des exemples où cela est vrai.)
Pour déclarer une variable sans spécifier de type, utilisez Dim
plus le nom de la variable (pour instance, Dim myVar
). Pour déclarer une variable avec un type, utilisez Dim
plus le nom de la variable, suivi As
de , puis du nom du type (pour instance, Dim myVar As String
).
@Code
' Assigning a string to a variable.
Dim greeting = "Welcome"
' Assigning a number to a variable.
Dim theCount = 3
' Assigning an expression to a variable.
Dim monthlyTotal = theCount + 5
' Assigning a date value to a variable.
Dim today = DateTime.Today
' Assigning the current page's URL to a variable.
Dim myPath = Request.Url
' Declaring variables using explicit data types.
Dim name as String = "Joe"
Dim count as Integer = 5
Dim tomorrow as DateTime = DateTime.Now.AddDays(1)
End Code
L’exemple suivant montre certaines expressions inline qui utilisent les variables d’une page web.
@Code
' Embedding the value of a variable into HTML markup.
' Precede the markup with @ because we are in a code block.
@<p>@greeting, friends!</p>
End Code
<!-- Using a variable with an inline expression in HTML. -->
<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>
Résultat affiché dans un navigateur :
Conversion et test des types de données
Bien que ASP.NET puissiez généralement déterminer automatiquement un type de données, il peut parfois ne pas le faire. Par conséquent, vous devrez peut-être aider ASP.NET en effectuant une conversion explicite. Même si vous n’avez pas besoin de convertir des types, il est parfois utile de tester pour voir quel type de données vous pouvez utiliser.
Le cas le plus courant est que vous devez convertir une chaîne en un autre type, par exemple en entier ou en date. L’exemple suivant illustre un cas classique où vous devez convertir une chaîne en nombre.
@Code
Dim total = 0
Dim totalMessage = ""
if IsPost Then
' Retrieve the numbers that the user entered.
Dim num1 = Request("text1")
Dim num2 = Request("text2")
' Convert the entered strings into integers numbers and add.
total = num1.AsInt() + num2.AsInt()
totalMessage = "Total = " & total
End If
End Code
En règle générale, l’entrée utilisateur vous est fournie sous forme de chaînes. Même si vous avez invité l’utilisateur à entrer un nombre et même s’il a entré un chiffre, lorsque l’entrée de l’utilisateur est envoyée et que vous la lisez dans le code, les données sont au format chaîne. Par conséquent, vous devez convertir la chaîne en nombre. Dans l’exemple, si vous essayez d’effectuer des opérations arithmétiques sur les valeurs sans les convertir, les résultats d’erreur suivants se produisent, car ASP.NET ne peut pas ajouter deux chaînes :
Cannot implicitly convert type 'string' to 'int'.
Pour convertir les valeurs en entiers, vous appelez la AsInt
méthode . Si la conversion réussit, vous pouvez ajouter les nombres.
Le tableau suivant répertorie certaines méthodes de conversion et de test courantes pour les variables.
Méthode
Description
Exemple
AsInt(), IsInt()
Convertit une chaîne qui représente un nombre entier (comme « 593 ») en entier.
Dim myIntNumber = 0
Dim myStringNum = "539"
If myStringNum.IsInt() Then
myIntNumber = myStringNum.AsInt()
End If
AsBool(), IsBool()
Convertit une chaîne telle que « true » ou « false » en type booléen.
Dim myStringBool = "True"
Dim myVar = myStringBool.AsBool()
AsFloat(), IsFloat()
Convertit une chaîne dont la valeur décimale est « 1.3 » ou « 7.439 » en nombre à virgule flottante.
Dim myStringFloat = "41.432895"
Dim myFloatNum = myStringFloat.AsFloat()
AsDecimal(), IsDecimal()
Convertit une chaîne qui a une valeur décimale telle que « 1.3 » ou « 7.439 » en nombre décimal. (Dans ASP.NET, un nombre décimal est plus précis qu’un nombre à virgule flottante.)
Dim myStringDec = "10317.425"
Dim myDecNum = myStringDec.AsDecimal()
AsDateTime(), IsDateTime()
Convertit une chaîne qui représente une valeur de date et d’heure en type ASP.NET DateTime
.
Dim myDateString = "12/27/2012"
Dim newDate = myDateString.AsDateTime()
ToString()
Convertit tout autre type de données en chaîne.
Dim num1 As Integer = 17
Dim num2 As Integer = 76
' myString is set to 1776
Dim myString as String = num1.ToString() & _
num2.ToString()
Opérateurs
Un opérateur est un mot clé ou un caractère qui indique ASP.NET quel type de commande effectuer dans une expression. Visual Basic prend en charge de nombreux opérateurs, mais il vous suffit d’en reconnaître quelques-uns pour commencer à développer ASP.NET pages web. Le tableau suivant récapitule les opérateurs les plus courants.
Opérateur
Description
Exemples
+ - * /
Opérateurs mathématiques utilisés dans les expressions numériques.
@(5 + 13)
Dim netWorth = 150000
Dim newTotal = netWorth * 2
@(newTotal / 2)
=
Affectation et égalité. Selon le contexte, assigne la valeur du côté droit d’une instruction à l’objet situé à gauche ou vérifie l’égalité des valeurs.
Dim age = 17
Dim income = Request("AnnualIncome")
<>
Inégalité Retourne True
si les valeurs ne sont pas égales.
Dim theNum = 13
If theNum <> 15 Then
' Do something.
End If
< > <= >=
Inférieur à, supérieur à, inférieur ou égal à et supérieur ou égal à.
If 2 < 3 Then
' Do something.
End If
Dim currentCount = 12
If currentCount >= 12 Then
' Do something.
End If
&
Concaténation, qui est utilisée pour joindre des chaînes.
' The displayed result is "abcdef".
@("abc" & "def")
+= -=
Opérateurs d’incrémentation et de décrémentation, qui ajoutent et soustraient 1 (respectivement) d’une variable.
Dim theCount As Integer = 0
theCount += 1 ' Adds 1 to count
.
Point. Utilisé pour distinguer les objets, ainsi que leurs propriétés et méthodes.
Dim myUrl = Request.Url
Dim count = Request("Count").AsInt()
()
Parenthèses. Permet de regrouper des expressions, de passer des paramètres à des méthodes et d’accéder aux membres des tableaux et des collections.
@(3 + 7)
@Request.MapPath(Request.FilePath)
Not
Not. Inverse une valeur true sur false et vice versa. Généralement utilisé comme méthode abrégée pour False
tester (c’est-à-dire, pour non True
).
Dim taskCompleted As Boolean = False
' Processing.
If Not taskCompleted Then
' Continue processing
End If
AndAlso OrElse
Logique AND et OR, qui sont utilisés pour lier des conditions entre elles.
Dim myTaskCompleted As Boolean = false
Dim totalCount As Integer = 0
' Processing.
If (Not myTaskCompleted) AndAlso _
totalCount < 12 Then
' Continue processing.
End If
Utilisation des chemins d’accès aux fichiers et aux dossiers dans le code
Vous travaillerez souvent avec des chemins d’accès aux fichiers et aux dossiers dans votre code. Voici un exemple de structure de dossiers physiques pour un site web tel qu’il peut apparaître sur votre ordinateur de développement :
C:\WebSites\MyWebSite default.cshtml datafile.txt \images Logo.jpg \styles Styles.css
Voici quelques détails essentiels sur les URL et les chemins d’accès :
- Une URL commence par un nom de domaine (
http://www.example.com
) ou un nom de serveur (http://localhost
,http://mycomputer
). - Une URL correspond à un chemin physique sur un ordinateur hôte. Par exemple,
http://myserver
peut correspondre au dossier C:\websites\mywebsite sur le serveur. - Un chemin d’accès virtuel est abrégé pour représenter les chemins d’accès dans le code sans avoir à spécifier le chemin complet. Il inclut la partie d’une URL qui suit le nom du domaine ou du serveur. Lorsque vous utilisez des chemins d’accès virtuels, vous pouvez déplacer votre code vers un autre domaine ou serveur sans avoir à mettre à jour les chemins.
Voici un exemple pour vous aider à comprendre les différences :
URL complète | http://mycompanyserver/humanresources/CompanyPolicy.htm |
---|---|
Nom du serveur | mycompanyserver |
Chemin d'accès virtuel | /humanresources/CompanyPolicy.htm |
Chemin d’accès physique | C:\mywebsites\humanresources\CompanyPolicy.htm |
La racine virtuelle est /, tout comme la racine de votre lecteur C: est . (Les chemins d’accès aux dossiers virtuels utilisent toujours des barres obliques.) Le chemin d’accès virtuel d’un dossier ne doit pas avoir le même nom que le dossier physique ; il peut s’agir d’un alias. (Sur les serveurs de production, le chemin d’accès virtuel correspond rarement à un chemin physique exact.)
Lorsque vous utilisez des fichiers et des dossiers dans du code, vous devez parfois référencer le chemin d’accès physique et parfois un chemin d’accès virtuel, en fonction des objets que vous utilisez. ASP.NET vous donne les outils suivants pour utiliser les chemins d’accès aux fichiers et aux dossiers dans le code : la Server.MapPath
méthode et l’opérateur et Href
la ~
méthode.
Conversion de chemins d’accès virtuels en chemins physiques : méthode Server.MapPath
La Server.MapPath
méthode convertit un chemin d’accès virtuel (comme /default.cshtml) en chemin d’accès physique absolu (comme C:\WebSites\MyWebSiteFolder\default.cshtml). Vous utilisez cette méthode chaque fois que vous avez besoin d’un chemin d’accès physique complet. Par exemple, lorsque vous lisez ou écrivez un fichier texte ou un fichier image sur le serveur web.
En règle générale, vous ne connaissez pas le chemin physique absolu de votre site sur le serveur d’un site d’hébergement. Cette méthode peut donc convertir le chemin d’accès que vous connaissez , le chemin d’accès virtuel, en chemin d’accès correspondant sur le serveur pour vous. Vous transmettez le chemin d’accès virtuel à un fichier ou un dossier à la méthode et retourne le chemin physique :
@Code
Dim dataFilePath = "~/dataFile.txt"
End Code
<!-- Displays a physical path C:\Websites\MyWebSite\datafile.txt -->
<p>@Server.MapPath(dataFilePath)</p>
Référencement de la racine virtuelle : l’opérateur ~ et la méthode Href
Dans un fichier .cshtml ou .vbhtml , vous pouvez référencer le chemin d’accès racine virtuel à l’aide de l’opérateur ~
. Cela est très pratique, car vous pouvez déplacer des pages dans un site, et tous les liens qu’elles contiennent vers d’autres pages ne seront pas rompus. Il est également pratique si vous déplacez votre site web vers un autre emplacement. Voici quelques exemples :
@Code
Dim myImagesFolder = "~/images"
Dim myStyleSheet = "~/styles/StyleSheet.css"
End Code
Si le site web est http://myserver/myapp
, voici comment ASP.NET traitez ces chemins lorsque la page s’exécute :
myImagesFolder
:http://myserver/myapp/images
myStyleSheet
:http://myserver/myapp/styles/Stylesheet.css
(Vous ne verrez pas réellement ces chemins en tant que valeurs de la variable, mais ASP.NET traiterez les chemins comme s’ils étaient ce qu’ils étaient.)
Vous pouvez utiliser l’opérateur à la fois dans le ~
code du serveur (comme ci-dessus) et dans le balisage, comme suit :
<!-- Examples of using the ~ operator in markup in ASP.NET Web Pages -->
<a href="~/Default">Home</a>
<img src="~/images/MyImages.png" />
Dans le balisage, vous utilisez l’opérateur pour créer des ~
chemins d’accès à des ressources telles que des fichiers image, d’autres pages web et des fichiers CSS. Lorsque la page s’exécute, ASP.NET examine la page (code et balisage) et résout toutes les ~
références au chemin d’accès approprié.
Logique et boucles conditionnelles
ASP.NET code de serveur vous permet d’effectuer des tâches basées sur des conditions et d’écrire du code qui répète des instructions un nombre spécifique de fois, c’est-à-dire du code qui exécute une boucle).
Conditions de test
Pour tester une condition simple, utilisez l’instruction If...Then
, qui retourne True
ou False
en fonction d’un test que vous spécifiez :
@Code
Dim showToday = True
If showToday Then
DateTime.Today
End If
End Code
Le If
mot clé démarre un bloc. Le test (condition) réel suit le If
mot clé et retourne true ou false. L’instruction If
se termine par Then
. Les instructions qui s’exécuteront si le test a la valeur true sont placées entre If
et End If
. Une If
instruction peut inclure un Else
bloc qui spécifie des instructions à exécuter si la condition est false :
@Code
Dim showToday = False
If showToday Then
DateTime.Today
Else
@<text>Sorry!</text>
End If
End Code
Si une If
instruction démarre un bloc de code, vous n’avez pas besoin d’utiliser les instructions normales Code...End Code
pour inclure les blocs. Vous pouvez simplement ajouter @
au bloc, et cela fonctionnera. Cette approche fonctionne avec If
d’autres mots clés de programmation Visual Basic qui sont suivis de blocs de code, notamment For
, For Each
, Do While
, etc.
@If showToday Then
DateTime.Today
Else
@<text>Sorry!</text>
End If
Vous pouvez ajouter plusieurs conditions à l’aide d’un ou plusieurs ElseIf
blocs :
@Code
Dim theBalance = 4.99
If theBalance = 0 Then
@<p>You have a zero balance.</p>
ElseIf theBalance > 0 AndAlso theBalance <= 5 Then
' If the balance is above 0 but less than
' or equal to $5, display this message.
@<p>Your balance of $@theBalance is very low.</p>
Else
' For balances greater than $5, display balance.
@<p>Your balance is: $@theBalance</p>
End If
End Code
Dans cet exemple, si la première condition du If
bloc n’est pas vraie, la ElseIf
condition est vérifiée. Si cette condition est remplie, les instructions du ElseIf
bloc sont exécutées. Si aucune des conditions n’est remplie, les instructions du Else
bloc sont exécutées. Vous pouvez ajouter n’importe quel nombre de ElseIf
blocs, puis fermer avec un Else
bloc comme condition « tout le reste ».
Pour tester un grand nombre de conditions, utilisez un Select Case
bloc :
@Code
Dim weekday = "Wednesday"
Dim greeting = ""
Select Case weekday
Case "Monday"
greeting = "Ok, it's a marvelous Monday."
Case "Tuesday"
greeting = "It's a tremendous Tuesday."
Case "Wednesday"
greeting = "Wild Wednesday is here!"
Case Else
greeting = "It's some other day, oh well."
End Select
End Code
<p>Since it is @weekday, the message for today is: @greeting</p>
La valeur à tester est entre parenthèses (dans l’exemple, la variable du jour de la semaine). Chaque test individuel utilise une Case
instruction qui répertorie une valeur. Si la valeur d’une Case
instruction correspond à la valeur de test, le code de ce Case
bloc est exécuté.
Résultat des deux derniers blocs conditionnels affichés dans un navigateur :
Code de boucle
Vous devez souvent exécuter les mêmes instructions à plusieurs reprises. Pour ce faire, effectuez une boucle. Par exemple, vous exécutez souvent les mêmes instructions pour chaque élément d’une collection de données. Si vous savez exactement combien de fois vous souhaitez effectuer une boucle, vous pouvez utiliser une For
boucle. Ce type de boucle est particulièrement utile pour compter vers le haut ou le décompte vers le bas :
@For i = 10 To 20
@<p>Item #: @i</p>
Next i
La boucle commence par le For
mot clé, suivi de trois éléments :
- Immédiatement après l’instruction
For
, vous déclarez une variable de compteur (vous n’avez pas besoin d’utiliserDim
), puis vous indiquez la plage, comme dansi = 10 to 20
. Cela signifie que la variablei
commence à compter à 10 et se poursuit jusqu’à ce qu’elle atteigne 20 (inclus). - Entre les
For
instructions etNext
est le contenu du bloc. Cela peut contenir une ou plusieurs instructions de code qui s’exécutent avec chaque boucle. - L’instruction
Next i
termine la boucle. Il incrémente le compteur et démarre l’itération suivante de la boucle.
La ligne de code entre les For
lignes et Next
contient le code qui s’exécute pour chaque itération de la boucle. Le balisage crée un nouveau paragraphe (<p>
élément) à chaque fois et ajoute une ligne à la sortie, affichant la valeur de i (le compteur). Lorsque vous exécutez cette page, l’exemple crée 11 lignes affichant la sortie, avec le texte dans chaque ligne indiquant le numéro d’élément.
Si vous utilisez une collection ou un tableau, vous utilisez souvent une For Each
boucle. Une collection est un groupe d’objets similaires, et la For Each
boucle vous permet d’effectuer une tâche sur chaque élément de la collection. Ce type de boucle est pratique pour les collections, car contrairement à une For
boucle, vous n’avez pas besoin d’incrémenter le compteur ou de définir une limite. Au lieu de cela, le code de For Each
boucle passe simplement par la collection jusqu’à ce qu’elle soit terminée.
Cet exemple retourne les éléments de la Request.ServerVariables
collection (qui contient des informations sur votre serveur web). Il utilise une For Each
boucle pour afficher le nom de chaque élément en créant un élément <li>
dans une liste à puces HTML.
<ul>
@For Each myItem In Request.ServerVariables
@<li>@myItem</li>
Next myItem
</ul>
La For Each
mot clé est suivie d’une variable qui représente un seul élément de la collection (dans l’exemple ), myItem
suivie de la In
mot clé, suivie de la collection que vous souhaitez parcourir en boucle. Dans le corps de la For Each
boucle, vous pouvez accéder à l’élément actif à l’aide de la variable que vous avez déclarée précédemment.
Pour créer une boucle plus à usage général, utilisez l’instruction Do While
:
@Code
Dim countNum = 0
Do While countNum < 50
countNum += 1
@<p>Line #@countNum: </p>
Loop
End Code
Cette boucle commence par la Do While
mot clé, suivie d’une condition, suivie du bloc à répéter. Les boucles incrémentent généralement (ajoutent à) ou décrémentent (soustraient de) une variable ou un objet utilisé pour le comptage. Dans l’exemple, l’opérateur +=
ajoute 1 à la valeur d’une variable chaque fois que la boucle s’exécute. (Pour décrémenter une variable dans une boucle qui compte vers le bas, vous devez utiliser l’opérateur -=
de décrémentation.)
Objets et collections
Presque tout ce qui se trouve dans un site web ASP.NET est un objet, y compris la page web elle-même. Cette section décrit certains objets importants que vous allez utiliser fréquemment dans votre code.
Objets Page
L’objet le plus simple dans ASP.NET est la page. Vous pouvez accéder directement aux propriétés de l’objet de page sans objet éligible. Le code suivant obtient le chemin du fichier de la page, à l’aide de l’objet Request
de la page :
@Code
Dim path = Request.FilePath
End Code
Vous pouvez utiliser les propriétés de l’objet Page
pour obtenir un grand nombre d’informations, telles que :
Request
. Comme vous l’avez déjà vu, il s’agit d’une collection d’informations sur la requête actuelle, notamment le type de navigateur à l’origine de la demande, l’URL de la page, l’identité de l’utilisateur, etc.Response
. Il s’agit d’une collection d’informations sur la réponse (page) qui sera envoyée au navigateur une fois l’exécution du code du serveur terminée. Par exemple, vous pouvez utiliser cette propriété pour écrire des informations dans la réponse.@Code ' Access the page's Request object to retrieve the URL. Dim pageUrl = Request.Url End Code <a href="@pageUrl">My page</a>
Objets de collection (tableaux et dictionnaires)
Une collection est un groupe d’objets du même type, par exemple une collection d’objets d’une Customer
base de données. ASP.NET contient de nombreuses collections intégrées, comme la Request.Files
collection.
Vous travaillerez souvent avec des données dans des collections. Deux types de collection courants sont le tableau et le dictionnaire. Un tableau est utile lorsque vous souhaitez stocker une collection d’éléments similaires, mais que vous ne souhaitez pas créer une variable distincte pour contenir chaque élément :
<h3>Team Members</h3>
@Code
Dim teamMembers() As String = {"Matt", "Joanne", "Robert", "Nancy"}
For Each name In teamMembers
@<p>@name</p>
Next name
End Code
Avec les tableaux, vous déclarez un type de données spécifique, tel que String
, Integer
ou DateTime
. Pour indiquer que la variable peut contenir un tableau, vous ajoutez des parenthèses au nom de la variable dans la déclaration (par Dim myVar() As String
exemple, ). Vous pouvez accéder aux éléments d’un tableau à l’aide de leur position (index) ou de l’instruction For Each
. Les index de tableau sont de base zéro, c’est-à-dire que le premier élément est à la position 0, le deuxième élément est à la position 1, et ainsi de suite.
@Code
Dim teamMembers() As String = {"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>
For Each name In teamMembers
@<p>@name</p>
Next name
@<h3>Reversed order of team members in the list</h3>
Array.Reverse(teamMembers)
For Each reversedItem In teamMembers
@<p>@reversedItem</p>
Next reversedItem
End Code
Vous pouvez déterminer le nombre d’éléments d’un tableau en obtenant sa Length
propriété. Pour obtenir la position d’un élément spécifique dans le tableau (autrement dit, pour effectuer une recherche dans le tableau), utilisez la Array.IndexOf
méthode . Vous pouvez également effectuer des opérations comme inverser le contenu d’un tableau (la Array.Reverse
méthode) ou trier le contenu (la Array.Sort
méthode ).
Sortie du code du tableau de chaînes affiché dans un navigateur :
Un dictionnaire est une collection de paires clé/valeur, dans laquelle vous fournissez la clé (ou le nom) pour définir ou récupérer la valeur correspondante :
@Code
Dim myScores = New Dictionary(Of String, Integer)()
myScores.Add("test1", 71)
myScores.Add("test2", 82)
myScores.Add("test3", 100)
myScores.Add("test4", 59)
End Code
<p>My score on test 3 is: @myScores("test3")%</p>
@Code
myScores("test4") = 79
End Code
<p>My corrected score on test 4 is: @myScores("test4")%</p>
Pour créer un dictionnaire, vous utilisez le New
mot clé pour indiquer que vous créez un Dictionary
objet. Vous pouvez affecter un dictionnaire à une variable à l’aide de la Dim
mot clé. Vous indiquez les types de données des éléments dans le dictionnaire à l’aide de parenthèses ( ( )
). À la fin de la déclaration, vous devez ajouter une autre paire de parenthèses, car il s’agit en fait d’une méthode qui crée un dictionnaire.
Pour ajouter des éléments au dictionnaire, vous pouvez appeler la Add
méthode de la variable de dictionnaire (myScores
dans ce cas), puis spécifier une clé et une valeur. Vous pouvez également utiliser des parenthèses pour indiquer la clé et effectuer une affectation simple, comme dans l’exemple suivant :
@Code
myScores("test4") = 79
End Code
Pour obtenir une valeur du dictionnaire, spécifiez la clé entre parenthèses :
@myScores("test4")
Appel de méthodes avec des paramètres
Comme vous l’avez vu plus haut dans cet article, les objets avec lesquels vous programmez ont des méthodes. Par exemple, un Database
objet peut avoir une Database.Connect
méthode . De nombreuses méthodes ont également un ou plusieurs paramètres. Un paramètre est une valeur que vous passez à une méthode pour permettre à la méthode d’effectuer sa tâche. Par exemple, examinez une déclaration pour la Request.MapPath
méthode, qui prend trois paramètres :
Public Overridable Function MapPath (virtualPath As String, _
baseVirtualDir As String, _
allowCrossAppMapping As Boolean)
Cette méthode retourne le chemin d’accès physique sur le serveur qui correspond à un chemin d’accès virtuel spécifié. Les trois paramètres de la méthode sont virtualPath
, baseVirtualDir
et allowCrossAppMapping
. (Notez que dans la déclaration, les paramètres sont répertoriés avec les types de données qu’ils accepteront.) Lorsque vous appelez cette méthode, vous devez fournir des valeurs pour les trois paramètres.
Lorsque vous utilisez Visual Basic avec la syntaxe Razor, vous avez deux options pour passer des paramètres à une méthode : les paramètres positionnels ou les paramètres nommés. Pour appeler une méthode à l’aide de paramètres positionnels, vous passez les paramètres dans un ordre strict spécifié dans la déclaration de méthode. (Vous connaissez généralement cet ordre en lisant la documentation de la méthode.) Vous devez suivre l’ordre et vous ne pouvez ignorer aucun des paramètres . Si nécessaire, vous passez une chaîne vide (""
) ou null pour un paramètre positionnel pour lequel vous n’avez pas de valeur.
L’exemple suivant suppose que vous disposez d’un dossier nommé scripts sur votre site web. Le code appelle la Request.MapPath
méthode et passe des valeurs pour les trois paramètres dans le bon ordre. Il affiche ensuite le chemin mappé résultant.
@Code
' Pass parameters to a method using positional parameters.
Dim myPathPositional = Request.MapPath("/scripts", "/", true)
End Code
<p>@myPathPositional</p>
Lorsqu’il existe de nombreux paramètres pour une méthode, vous pouvez conserver votre code plus propre et plus lisible à l’aide de paramètres nommés. Pour appeler une méthode à l’aide de paramètres nommés, spécifiez le nom du paramètre suivi de :=
, puis fournissez la valeur . L’avantage des paramètres nommés est que vous pouvez les ajouter dans l’ordre de votre choix. (L’inconvénient est que l’appel de méthode n’est pas aussi compact.)
L’exemple suivant appelle la même méthode que ci-dessus, mais utilise des paramètres nommés pour fournir les valeurs :
@Code
' Pass parameters to a method using named parameters.
Dim myPathNamed = Request.MapPath(baseVirtualDir:= "/", allowCrossAppMapping:= true, virtualPath:= "/scripts")
End Code
<p>@myPathNamed</p>
Comme vous pouvez le voir, les paramètres sont passés dans un ordre différent. Toutefois, si vous exécutez l’exemple précédent et cet exemple, ils retournent la même valeur.
Gestion des erreurs
Try-Catch instructions
Vous avez souvent des instructions dans votre code qui peuvent échouer pour des raisons en dehors de votre contrôle. Par exemple :
- Si votre code tente d’ouvrir, de créer, de lire ou d’écrire un fichier, toutes sortes d’erreurs peuvent se produire. Le fichier souhaité n’existe peut-être pas, il peut être verrouillé, le code n’a peut-être pas d’autorisations, etc.
- De même, si votre code tente de mettre à jour des enregistrements dans une base de données, il peut y avoir des problèmes d’autorisations, la connexion à la base de données peut être supprimée, les données à enregistrer peuvent ne pas être valides, etc.
En termes de programmation, ces situations sont appelées exceptions. Si votre code rencontre une exception, il génère (lève) un message d’erreur qui est, au mieux, ennuyeux pour les utilisateurs.
Dans les situations où votre code peut rencontrer des exceptions et pour éviter les messages d’erreur de ce type, vous pouvez utiliser Try/Catch
des instructions. Dans l’instruction Try
, vous exécutez le code que vous vérifiez. Dans une ou plusieurs Catch
instructions, vous pouvez rechercher des erreurs spécifiques (types d’exceptions spécifiques) qui ont pu se produire. Vous pouvez inclure autant d’instructions Catch
que nécessaire pour rechercher les erreurs que vous prévoyez.
Remarque
Nous vous recommandons d’éviter d’utiliser la Response.Redirect
méthode dans Try/Catch
les instructions, car elle peut provoquer une exception dans votre page.
L’exemple suivant montre une page qui crée un fichier texte lors de la première demande, puis affiche un bouton qui permet à l’utilisateur d’ouvrir le fichier. L’exemple utilise délibérément un nom de fichier incorrect afin qu’il provoque une exception. Le code inclut des Catch
instructions pour deux exceptions possibles : FileNotFoundException
, qui se produit si le nom de fichier est incorrect et DirectoryNotFoundException
, qui se produit si ASP.NET ne parvenez même pas à trouver le dossier. (Vous pouvez supprimer les marques de commentaire d’une instruction dans l’exemple pour voir comment elle s’exécute quand tout fonctionne correctement.)
Si votre code n’a pas géré l’exception, une page d’erreur semblable à la capture d’écran précédente s’affiche. Toutefois, la Try/Catch
section permet d’empêcher l’utilisateur de voir ces types d’erreurs.
@Code
Dim dataFilePath = "~/dataFile.txt"
Dim fileContents = ""
Dim physicalPath = Server.MapPath(dataFilePath)
Dim userMessage = "Hello world, the time is " + DateTime.Now
Dim userErrMsg = ""
Dim errMsg = ""
If IsPost Then
' When the user clicks the "Open File" button and posts
' the page, try to open the file.
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 ex As FileNotFoundException
' You can use the exception object for debugging, logging, etc.
errMsg = ex.Message
' Create a friendly error message for users.
userErrMsg = "The file could not be opened, please contact " _
& "your system administrator."
Catch ex As DirectoryNotFoundException
' Similar to previous exception.
errMsg = ex.Message
userErrMsg = "The file could not be opened, please contact " _
& "your system administrator."
End Try
Else
' The first time the page is requested, create the text file.
File.WriteAllText(physicalPath, userMessage)
End If
End Code
<!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>