Introduzione alla programmazione Web di ASP.NET tramite la sintassi Razor (Visual Basic)
Questo articolo offre una panoramica della programmazione con Pagine Web ASP.NET usando la sintassi Razor e Visual Basic. ASP.NET è la tecnologia Microsoft per l'esecuzione di pagine Web dinamiche nei server Web.
Cosa si apprenderà:
- I primi 8 suggerimenti per la programmazione per iniziare a usare la programmazione Pagine Web ASP.NET usando la sintassi Razor.
- Concetti di programmazione di base necessari.
- Qual è ASP.NET codice del server e la sintassi Razor.
Versioni software
- Pagine Web ASP.NET (Razor) 3
Questa esercitazione funziona anche con Pagine Web ASP.NET 2.
La maggior parte degli esempi di uso di Pagine Web ASP.NET con la sintassi Razor usa C#. Ma la sintassi Razor supporta anche Visual Basic. Per programmare una pagina Web ASP.NET in Visual Basic, creare una pagina Web con estensione vbhtml filename e quindi aggiungere codice Visual Basic. Questo articolo offre una panoramica dell'uso del linguaggio e della sintassi di Visual Basic per creare ASP.NET pagine Web.
Nota
I modelli predefiniti di siti Web per Microsoft WebMatrix (panetteria, raccolta foto e sito iniziale e così via) sono disponibili nelle versioni C# e Visual Basic. È possibile installare i modelli di Visual Basic come pacchetti NuGet. I modelli di sito Web vengono installati nella cartella radice del sito in una cartella denominata Modelli Microsoft.
I primi 8 suggerimenti per la programmazione
Questa sezione elenca alcuni suggerimenti che è assolutamente necessario conoscere quando si inizia a scrivere codice del server ASP.NET usando la sintassi Razor.
1. Si aggiunge il codice a una pagina utilizzando il carattere @
Il @
carattere inizia espressioni inline, blocchi a istruzione singola e blocchi con più istruzioni:
<!-- 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>
Il risultato visualizzato in un browser:
Suggerimento
Codifica HTML
Quando si visualizza il contenuto in una pagina usando il @
carattere , come negli esempi precedenti, ASP.NET codifica HTML l'output. In questo modo, i caratteri HTML riservati (ad esempio <
e >
e &
) vengono sostituiti con codici che consentono di visualizzare i caratteri come caratteri in una pagina Web invece di essere interpretati come tag HTML o entità. Senza codifica HTML, l'output del codice server potrebbe non essere visualizzato correttamente e potrebbe esporre una pagina ai rischi per la sicurezza.
Se l'obiettivo è quello di restituire markup HTML che esegue il rendering dei tag come markup (ad esempio <p></p>
per un paragrafo o <em></em>
per evidenziare il testo), vedere la sezione Combinazione di testo, markup e codice nei blocchi di codice più avanti in questo articolo.
Per altre informazioni sulla codifica HTML, vedere Uso di moduli HTML in siti di Pagine Web ASP.NET.
2. Racchiudere blocchi di codice con Codice... Codice finale
Un blocco di codice include una o più istruzioni di codice e è racchiuso tra le Code
parole chiave e End Code
. Posizionare la parola chiave di apertura Code
immediatamente dopo il @
carattere, senza spazi vuoti tra di essi.
<!-- 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>
Il risultato visualizzato in un browser:
3. All'interno di un blocco, terminare ogni istruzione di codice con un'interruzione di riga
In un blocco di codice Visual Basic ogni istruzione termina con un'interruzione di riga. Più avanti nell'articolo verrà visualizzato un modo per eseguire il wrapping di un'istruzione di codice lungo in più righe, se necessario.
<!-- 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. Si usano le variabili per archiviare i valori
È possibile archiviare i valori in una variabile, incluse stringhe, numeri e date e così via. Si crea una nuova variabile usando la Dim
parola chiave . È possibile inserire i valori delle variabili direttamente in una pagina usando @
.
<!-- 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>
Il risultato visualizzato in un browser:
5. Racchiudere i valori letterali di stringa tra virgolette doppie
Una stringa è una sequenza di caratteri trattati come testo. Per specificare una stringa, racchiuderla tra virgolette doppie:
@Code
Dim myString = "This is a string literal"
End Code
Per incorporare virgolette doppie all'interno di un valore stringa, inserire due virgolette doppie. Se si desidera che la virgoletta doppia venga visualizzata una volta nell'output della pagina, immetterla come ""
all'interno della stringa tra virgolette e, se si desidera che venga visualizzata due volte, immetterla come """"
all'interno della stringa tra virgolette.
<!-- Embedding double quotation marks in a string -->
@Code
Dim myQuote = "The person said: ""Hello, today is Monday."""
End Code
<p>@myQuote</p>
Il risultato visualizzato in un browser:
6. Il codice visual Basic non fa distinzione tra maiuscole e minuscole
Il linguaggio Visual Basic non fa distinzione tra maiuscole e minuscole. Le parole chiave di programmazione (ad esempio Dim
, If
e True
) e i nomi delle variabili (ad myString
esempio , o subTotal
) possono essere scritti in qualsiasi caso.
Le righe di codice seguenti assegnano un valore alla variabile lastname
usando un nome minuscolo e quindi restituisce il valore della variabile nella pagina usando un nome maiuscolo.
@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>
Il risultato visualizzato in un browser:
7. Gran parte del codice implica l'uso di oggetti
Un oggetto rappresenta una cosa con cui è possibile programmare, ovvero una pagina, una casella di testo, un file, un'immagine, una richiesta Web, un messaggio di posta elettronica, un record del cliente (riga del database) e così via. Gli oggetti hanno proprietà che descrivono le relative caratteristiche: un oggetto casella di testo ha una Text
proprietà, un oggetto richiesta ha una Url
proprietà, un messaggio di posta elettronica ha una From
proprietà e un oggetto cliente ha una FirstName
proprietà . Gli oggetti dispongono anche di metodi che sono i "verbi" che possono eseguire. Gli esempi includono il metodo di Save
un oggetto file, il metodo di Rotate
un oggetto immagine e il metodo di un oggetto di Send
posta elettronica.
Spesso si lavora con l'oggetto Request
, che fornisce informazioni come i valori dei campi modulo nella pagina (caselle di testo e così via), il tipo di browser che ha effettuato la richiesta, l'URL della pagina, l'identità dell'utente e così via. In questo esempio viene illustrato come accedere alle proprietà dell'oggetto Request
e come chiamare il MapPath
metodo dell'oggetto Request
, che fornisce il percorso assoluto della pagina nel server:
<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>
Il risultato visualizzato in un browser:
8. È possibile scrivere codice che prende decisioni
Una funzionalità chiave delle pagine Web dinamiche è che è possibile determinare cosa fare in base alle condizioni. Il modo più comune per eseguire questa operazione consiste nell'istruzione (e nell'istruzione If
facoltativa 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'istruzione If IsPost
è un modo abbreviato per scrivere If IsPost = True
. If
Oltre alle istruzioni, esistono diversi modi per testare le condizioni, ripetere blocchi di codice e così via, descritti più avanti in questo articolo.
Il risultato visualizzato in un browser (dopo aver fatto clic su Invia):
Suggerimento
Metodi HTTP GET e POST e proprietà IsPost
Il protocollo usato per le pagine Web (HTTP) supporta un numero molto limitato di metodi ("verbi") usati per effettuare richieste al server. I due più comuni sono GET, che viene usato per leggere una pagina e POST, che viene usato per inviare una pagina. In generale, la prima volta che un utente richiede una pagina, la pagina viene richiesta tramite GET. Se l'utente compila un modulo e quindi fa clic su Invia, il browser effettua una richiesta POST al server.
Nella programmazione Web, spesso è utile sapere se una pagina viene richiesta come GET o come POST in modo da sapere come elaborare la pagina. In Pagine Web ASP.NET è possibile usare la IsPost
proprietà per verificare se una richiesta è GET o POST. Se la richiesta è un POST, la IsPost
proprietà restituirà true ed è possibile eseguire operazioni come leggere i valori delle caselle di testo in un modulo. Molti esempi illustrano come elaborare la pagina in modo diverso a seconda del valore di IsPost
.
Esempio di codice semplice
Questa procedura illustra come creare una pagina che illustra le tecniche di programmazione di base. Nell'esempio viene creata una pagina che consente agli utenti di immettere due numeri, quindi li aggiunge e visualizza il risultato.
Nell'editor creare un nuovo file e denominarlo AddNumbers.vbhtml.
Copiare il codice e il markup seguenti nella pagina, sostituendo qualsiasi elemento già presente nella pagina.
@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>
Ecco alcuni aspetti da notare:
- Il
@
carattere avvia il primo blocco di codice nella pagina e precede latotalMessage
variabile incorporata nella parte inferiore. - Il blocco nella parte superiore della pagina è racchiuso in
Code...End Code
. - Le variabili
total
,num1
,num2
etotalMessage
archiviano diversi numeri e una stringa. - Il valore stringa letterale assegnato alla
totalMessage
variabile è tra virgolette doppie. - Poiché il codice visual Basic non fa distinzione tra maiuscole e minuscole, quando la
totalMessage
variabile viene usata nella parte inferiore della pagina, il nome deve corrispondere solo all'ortografia della dichiarazione di variabile nella parte superiore della pagina. La combinazione di maiuscole e minuscole non è importante. - L'espressione
num1.AsInt()
+num2.AsInt()
mostra come usare oggetti e metodi. IlAsInt
metodo in ogni variabile converte la stringa immessa da un utente in un numero intero (un numero intero) che può essere aggiunto. - Il
<form>
tag include unmethod="post"
attributo . Specifica che quando l'utente fa clic su Aggiungi, la pagina verrà inviata al server usando il metodo HTTP POST. Quando la pagina viene inviata, il codiceIf IsPost
restituisce true e il codice condizionale viene eseguito, visualizzando il risultato dell'aggiunta dei numeri.
- Il
Salvare la pagina ed eseguirla in un browser. Assicurarsi che la pagina sia selezionata nell'area di lavoro File prima di eseguirla. Immettere due numeri interi e quindi fare clic sul pulsante Aggiungi .
Linguaggio e sintassi di Visual Basic
In precedenza è stato illustrato un esempio di base di come creare una pagina Web ASP.NET e come aggiungere codice server al markup HTML. In questa unità verranno fornite informazioni di base sull'uso di Visual Basic per scrivere ASP.NET codice server usando la sintassi Razor, ovvero le regole del linguaggio di programmazione.
Se si ha familiarità con la programmazione (soprattutto se si usa C, C++, C#, Visual Basic o JavaScript), gran parte di ciò che si legge qui sarà familiare. Probabilmente sarà necessario acquisire familiarità solo con il modo in cui il codice WebMatrix viene aggiunto al markup nei file vbhtml .
Combinazione di testo, markup e codice in blocchi di codice
Nei blocchi di codice del server è spesso necessario restituire testo e markup alla pagina. Se un blocco di codice del server contiene testo diverso da codice e che deve invece essere sottoposto a rendering così come è, ASP.NET deve essere in grado di distinguere il testo dal codice. L'operazione può essere eseguita in vari modi.
Racchiudere il testo in un elemento di blocco HTML come
<p></p>
o<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'elemento HTML può includere testo, elementi HTML aggiuntivi ed espressioni di codice server. Quando ASP.NET vede il tag HTML di apertura (ad esempio ,
<p>
), esegue il rendering di tutto l'elemento e il relativo contenuto così com'è nel browser (e risolve le espressioni del codice server).Usare l'operatore
@:
o l'elemento<text>
. Restituisce@:
una singola riga di contenuto contenente testo normale o tag HTML non corrispondenti. L'elemento racchiude più righe nell'output<text>
. Queste opzioni sono utili quando non si vuole eseguire il rendering di un elemento HTML come parte dell'output.@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
Nell'esempio seguente viene ripetuto l'esempio precedente, ma viene usata una singola coppia di
<text>
tag per racchiudere il testo da visualizzare.@If IsPost Then @<text> The time is: <br /> @DateTime.Now @DateTime.Now is the <em>current</em> time. </text> End If
Nell'esempio seguente i
<text>
tag e</text>
racchiudono tre righe, tutti con testo non contenuto e tag HTML non corrispondenti (<br />
), insieme al codice server e ai tag HTML corrispondenti. Anche in questo caso, è anche possibile precedere ogni riga singolarmente con l'operatore@:
. In entrambi i casi funziona.@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
Nota
Quando si restituisce testo come illustrato in questa sezione, usando un elemento HTML, l'operatore
@:
o l'elemento<text>
, ASP.NET non codifica l'output. Come indicato in precedenza, ASP.NET codifica l'output di espressioni di codice server e blocchi di codice server preceduti da@
, ad eccezione dei casi speciali indicati in questa sezione.
Spazio vuoto
Gli spazi aggiuntivi in un'istruzione (e all'esterno di un valore letterale stringa) non influiscono sull'istruzione:
@Code Dim personName = "Smith" End Code
Suddivisione di istruzioni lunghe in più righe
È possibile suddividere un'istruzione di codice lungo in più righe usando il carattere _
di sottolineatura (che in Visual Basic viene chiamato carattere di continuazione) dopo ogni riga di codice. Per interrompere un'istruzione nella riga successiva, alla fine della riga aggiungere uno spazio e quindi il carattere di continuazione. Continuare l'istruzione nella riga successiva. È possibile eseguire il wrapping delle istruzioni in tutte le righe necessarie per migliorare la leggibilità. Le seguenti istruzioni sono le stesse:
@Code
Dim familyName _
= "Smith"
End Code
@Code
Dim _
theName _
= _
"Smith"
End Code
Tuttavia, non è possibile eseguire il wrapping di una riga al centro di un valore letterale stringa. L'esempio seguente non funziona:
@Code
' Doesn't work.
Dim test = "This is a long _
string"
End Code
Per combinare una stringa lunga che esegue il wrapping in più righe come il codice precedente, è necessario usare l'operatore di concatenazione (&
), che verrà visualizzato più avanti in questo articolo.
Commenti del codice
I commenti ti permettono di lasciare note per te o per altri. I commenti della sintassi Razor sono preceduti da @*
e terminano con *@
.
@* A single-line comment is added like this example. *@
@*
This is a multiline code comment.
It can continue for any number of lines.
*@
All'interno dei blocchi di codice è possibile usare i commenti della sintassi Razor oppure è possibile usare un carattere di commento di Visual Basic comune, ovvero una virgoletta singola ('
) preceduta da ogni riga.
@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
Variabili
Una variabile è un oggetto denominato usato per archiviare i dati. È possibile assegnare un nome alle variabili, ma il nome deve iniziare con un carattere alfabetico e non può contenere spazi vuoti o caratteri riservati. In Visual Basic, come illustrato in precedenza, il caso delle lettere in un nome di variabile non è rilevante.
Variabili e tipi di dati
Una variabile può avere un tipo di dati specifico, che indica il tipo di dati archiviato nella variabile. È possibile avere variabili stringa che archiviano valori stringa (ad esempio "Hello world"), variabili integer che archiviano valori di numeri interi (ad esempio 3 o 79) e variabili di data che archiviano i valori di data in un'ampia gamma di formati (ad esempio 4/12/2012 o marzo 2009). Esistono anche molti altri tipi di dati che è possibile usare.
Non è tuttavia necessario specificare un tipo per una variabile. Nella maggior parte dei casi ASP.NET può determinare il tipo in base al modo in cui vengono usati i dati nella variabile. Occasionalmente è necessario specificare un tipo. Verranno visualizzati esempi in cui è true.
Per dichiarare una variabile senza specificare un tipo, usare Dim
più il nome della variabile , ad esempio Dim myVar
. Per dichiarare una variabile con un tipo, usare Dim
più il nome della variabile, seguito da As
e quindi il nome del tipo (ad esempio, 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'esempio seguente mostra alcune espressioni inline che usano le variabili in una pagina 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>
Il risultato visualizzato in un browser:
Conversione e test dei tipi di dati
Anche se ASP.NET in genere può determinare automaticamente un tipo di dati, a volte non può. Potrebbe quindi essere necessario aiutare ASP.NET eseguendo una conversione esplicita. Anche se non è necessario convertire i tipi, a volte è utile testare il tipo di dati che si potrebbe usare.
Il caso più comune è che è necessario convertire una stringa in un altro tipo, ad esempio in un numero intero o in una data. Nell'esempio seguente viene illustrato un caso tipico in cui è necessario convertire una stringa in un numero.
@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
Come regola, l'input dell'utente viene fornito come stringhe. Anche se all'utente è stato richiesto di immettere un numero e, anche se ha immesso una cifra, quando viene inviato l'input dell'utente e lo si legge nel codice, i dati sono in formato stringa. Pertanto, è necessario convertire la stringa in un numero. Nell'esempio, se si tenta di eseguire l'aritmetica sui valori senza convertirli, vengono restituiti i risultati dell'errore seguenti, perché ASP.NET non può aggiungere due stringhe:
Cannot implicitly convert type 'string' to 'int'.
Per convertire i valori in numeri interi, chiamare il AsInt
metodo . Se la conversione ha esito positivo, è possibile aggiungere i numeri.
Nella tabella seguente sono elencati alcuni metodi di conversione e test comuni per le variabili.
Metodo
Descrizione
Esempio
AsInt(), IsInt()
Converte una stringa che rappresenta un numero intero (ad esempio "593") in un numero intero.
Dim myIntNumber = 0
Dim myStringNum = "539"
If myStringNum.IsInt() Then
myIntNumber = myStringNum.AsInt()
End If
AsBool(), IsBool()
Converte una stringa come "true" o "false" in un tipo booleano.
Dim myStringBool = "True"
Dim myVar = myStringBool.AsBool()
AsFloat(), IsFloat()
Converte una stringa con un valore decimale, ad esempio "1,3" o "7,439" in un numero a virgola mobile.
Dim myStringFloat = "41.432895"
Dim myFloatNum = myStringFloat.AsFloat()
AsDecimal(), IsDecimal()
Converte una stringa con un valore decimale, ad esempio "1,3" o "7,439" in un numero decimale. In ASP.NET un numero decimale è più preciso di un numero a virgola mobile.
Dim myStringDec = "10317.425"
Dim myDecNum = myStringDec.AsDecimal()
AsDateTime(), IsDateTime()
Converte una stringa che rappresenta un valore di data e ora nel tipo ASP.NET DateTime
.
Dim myDateString = "12/27/2012"
Dim newDate = myDateString.AsDateTime()
ToString()
Converte qualsiasi altro tipo di dati in una stringa.
Dim num1 As Integer = 17
Dim num2 As Integer = 76
' myString is set to 1776
Dim myString as String = num1.ToString() & _
num2.ToString()
Operatori
Un operatore è una parola chiave o un carattere che indica ASP.NET quale tipo di comando eseguire in un'espressione. Visual Basic supporta molti operatori, ma è sufficiente riconoscere alcuni per iniziare a sviluppare ASP.NET pagine Web. La tabella seguente riepiloga gli operatori più comuni.
Operatore
Descrizione
esempi
+ - * /
Operatori matematici usati nelle espressioni numeriche.
@(5 + 13)
Dim netWorth = 150000
Dim newTotal = netWorth * 2
@(newTotal / 2)
=
Assegnazione e uguaglianza. A seconda del contesto, assegna il valore a destra di un'istruzione all'oggetto a sinistra oppure controlla l'uguaglianza dei valori.
Dim age = 17
Dim income = Request("AnnualIncome")
<>
Disuguaglianza. Restituisce True
se i valori non sono uguali.
Dim theNum = 13
If theNum <> 15 Then
' Do something.
End If
< > <= >=
Minore di, maggiore di, minore o uguale a e maggiore o uguale a.
If 2 < 3 Then
' Do something.
End If
Dim currentCount = 12
If currentCount >= 12 Then
' Do something.
End If
&
Concatenazione, utilizzata per unire stringhe.
' The displayed result is "abcdef".
@("abc" & "def")
+= -=
Operatori di incremento e decremento, che aggiungono e sottraggono rispettivamente 1 () da una variabile.
Dim theCount As Integer = 0
theCount += 1 ' Adds 1 to count
.
Punto. Utilizzato per distinguere gli oggetti e le relative proprietà e metodi.
Dim myUrl = Request.Url
Dim count = Request("Count").AsInt()
()
Parentesi. Usato per raggruppare le espressioni, per passare parametri ai metodi e per accedere ai membri di matrici e raccolte.
@(3 + 7)
@Request.MapPath(Request.FilePath)
Not
Not. Inverte un valore true su false e viceversa. In genere usato come modo breve per testare per False
(ovvero, per non True
).
Dim taskCompleted As Boolean = False
' Processing.
If Not taskCompleted Then
' Continue processing
End If
AndAlso OrElse
AND logico e OR, che vengono usati per collegare le condizioni insieme.
Dim myTaskCompleted As Boolean = false
Dim totalCount As Integer = 0
' Processing.
If (Not myTaskCompleted) AndAlso _
totalCount < 12 Then
' Continue processing.
End If
Uso dei percorsi file e cartelle nel codice
Spesso si usano i percorsi di file e cartelle nel codice. Ecco un esempio di struttura di cartelle fisiche per un sito Web come potrebbe essere visualizzato nel computer di sviluppo:
C:\WebSites\MyWebSite default.cshtml datafile.txt \images Logo.jpg \styles Styles.css
Ecco alcuni dettagli essenziali sugli URL e sui percorsi:
- Un URL inizia con un nome di dominio () o un nome del server (
http://www.example.com
http://localhost
,http://mycomputer
). - Un URL corrisponde a un percorso fisico in un computer host. Ad esempio,
http://myserver
potrebbe corrispondere alla cartella C:\website\mywebsite nel server. - Un percorso virtuale è a breve per rappresentare i percorsi nel codice senza dover specificare il percorso completo. Include la parte di un URL che segue il nome del dominio o del server. Quando si usano percorsi virtuali, è possibile spostare il codice in un dominio o un server diverso senza dover aggiornare i percorsi.
Ecco un esempio per comprendere le differenze:
URL completo | http://mycompanyserver/humanresources/CompanyPolicy.htm |
---|---|
Nome server | mycompanyserver |
Percorso virtuale | /humanresources/CompanyPolicy.htm |
Percorso fisico | C:\mywebsites\humanresources\CompanyPolicy.htm |
La radice virtuale è /, proprio come la radice dell'unità C: è . I percorsi delle cartelle virtuali usano sempre barre in avanti. Il percorso virtuale di una cartella non deve avere lo stesso nome della cartella fisica; può essere un alias. Nei server di produzione il percorso virtuale corrisponde raramente a un percorso fisico esatto.
Quando si utilizzano file e cartelle nel codice, a volte è necessario fare riferimento al percorso fisico e a volte a un percorso virtuale, a seconda degli oggetti usati. ASP.NET offre questi strumenti per l'uso dei percorsi di file e cartelle nel codice: il metodo e l'operatore e Href
il Server.MapPath
~
metodo.
Conversione di percorsi virtuali in percorsi fisici: metodo Server.MapPath
Il Server.MapPath
metodo converte un percorso virtuale (ad esempio /default.cshtml) in un percorso fisico assoluto (ad esempio C:\WebSites\MyWebSiteFolder\default.cshtml). Questo metodo viene usato in qualsiasi momento in cui è necessario un percorso fisico completo. Un esempio tipico è quando si sta leggendo o scrivendo un file di testo o un file di immagine nel server Web.
In genere non si conosce il percorso fisico assoluto del sito nel server del sito di hosting, in modo che questo metodo possa convertire il percorso che si conosce, il percorso virtuale, al percorso corrispondente nel server. Si passa il percorso virtuale a un file o una cartella al metodo e restituisce il percorso fisico:
@Code
Dim dataFilePath = "~/dataFile.txt"
End Code
<!-- Displays a physical path C:\Websites\MyWebSite\datafile.txt -->
<p>@Server.MapPath(dataFilePath)</p>
Riferimento alla radice virtuale: l'operatore ~ e il metodo Href
In un file con estensione cshtml o vbhtml è possibile fare riferimento al percorso radice virtuale usando l'operatore ~
. Questo è molto utile perché è possibile spostare pagine in un sito e tutti i collegamenti che contengono ad altre pagine non verranno interrotti. È utile anche nel caso in cui tu abbia mai spostato il tuo sito Web in una posizione diversa. Di seguito sono riportati alcuni esempi:
@Code
Dim myImagesFolder = "~/images"
Dim myStyleSheet = "~/styles/StyleSheet.css"
End Code
Se il sito Web è http://myserver/myapp
, ecco come ASP.NET tratterà questi percorsi quando viene eseguita la pagina:
myImagesFolder
:http://myserver/myapp/images
myStyleSheet
:http://myserver/myapp/styles/Stylesheet.css
Non verranno effettivamente visualizzati questi percorsi come valori della variabile, ma ASP.NET tratterà i percorsi come se fossero.
È possibile usare l'operatore ~
sia nel codice del server (come sopra) sia nel markup, come illustrato di seguito:
<!-- Examples of using the ~ operator in markup in ASP.NET Web Pages -->
<a href="~/Default">Home</a>
<img src="~/images/MyImages.png" />
Nel markup si usa l'operatore ~
per creare percorsi per risorse come file di immagine, altre pagine Web e file CSS. Quando viene eseguita la pagina, ASP.NET esamina la pagina (sia il codice che il markup) e risolve tutti i ~
riferimenti al percorso appropriato.
Logica condizionale e cicli
ASP.NET codice del server consente di eseguire attività in base a condizioni e scrivere codice che ripete istruzioni un numero specifico di volte, codice che esegue un ciclo.
Condizioni di test
Per testare una condizione semplice, usare l'istruzione If...Then
, che restituisce True
o False
in base a un test specificato:
@Code
Dim showToday = True
If showToday Then
DateTime.Today
End If
End Code
La If
parola chiave avvia un blocco. Il test effettivo (condizione) segue la If
parola chiave e restituisce true o false. L'istruzione If
termina con Then
. Le istruzioni eseguite se il test è true sono racchiuse da If
e End If
. Un'istruzione If
può includere un Else
blocco che specifica le istruzioni da eseguire se la condizione è false:
@Code
Dim showToday = False
If showToday Then
DateTime.Today
Else
@<text>Sorry!</text>
End If
End Code
Se un'istruzione If
avvia un blocco di codice, non è necessario usare le normali Code...End Code
istruzioni per includere i blocchi. Puoi solo aggiungere @
al blocco e funzionerà. Questo approccio funziona con If
oltre ad altre parole chiave di programmazione di Visual Basic seguite da blocchi di codice, tra cui For
, For Each
, Do While
e così via.
@If showToday Then
DateTime.Today
Else
@<text>Sorry!</text>
End If
È possibile aggiungere più condizioni usando uno o più ElseIf
blocchi:
@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
In questo esempio, se la prima condizione del If
blocco non è true, la ElseIf
condizione viene selezionata. Se tale condizione viene soddisfatta, vengono eseguite le istruzioni nel ElseIf
blocco. Se non vengono soddisfatte nessuna delle condizioni, vengono eseguite le istruzioni nel Else
blocco. È possibile aggiungere qualsiasi numero di ElseIf
blocchi e quindi chiudere con un Else
blocco come condizione "tutto il resto".
Per testare un numero elevato di condizioni, usare un Select Case
blocco:
@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>
Il valore da testare è tra parentesi (nell'esempio la variabile del giorno della settimana). Ogni singolo test usa un'istruzione che elenca un Case
valore. Se il valore di un'istruzione Case
corrisponde al valore di test, il codice in tale Case
blocco viene eseguito.
Risultato degli ultimi due blocchi condizionali visualizzati in un browser:
Codice ciclo
Spesso è necessario eseguire le stesse istruzioni ripetutamente. A tale scopo, eseguire il ciclo. Ad esempio, si eseguono spesso le stesse istruzioni per ogni elemento in una raccolta di dati. Se si conosce esattamente il numero di volte che si vuole eseguire il ciclo, è possibile usare un For
ciclo. Questo tipo di ciclo è particolarmente utile per il conteggio o il conteggio:
@For i = 10 To 20
@<p>Item #: @i</p>
Next i
Il ciclo inizia con la For
parola chiave, seguito da tre elementi:
- Immediatamente dopo l'istruzione, si dichiara una variabile di contatore (non è necessario usare
Dim
) e quindi indicare l'intervalloFor
, come ini = 10 to 20
. Ciò significa che la variabilei
inizierà a contare a 10 e continuerà fino a raggiungere 20 (inclusiva). - Tra le
For
istruzioni eNext
è il contenuto del blocco. Può contenere una o più istruzioni di codice eseguite con ogni ciclo. - L'istruzione
Next i
termina il ciclo. Incrementa il contatore e avvia l'iterazione successiva del ciclo.
La riga di codice tra le For
righe e Next
contiene il codice eseguito per ogni iterazione del ciclo. Il markup crea un nuovo paragrafo (<p>
elemento) ogni volta e aggiunge una riga all'output, visualizzando il valore di i (contatore). Quando si esegue questa pagina, nell'esempio vengono create 11 righe che visualizzano l'output, con il testo in ogni riga che indica il numero di elemento.
Se si usa una raccolta o una matrice, spesso si usa un For Each
ciclo. Una raccolta è un gruppo di oggetti simili e il For Each
ciclo consente di eseguire un'attività su ogni elemento della raccolta. Questo tipo di ciclo è pratico per le raccolte, perché a differenza di un For
ciclo, non è necessario aumentare il contatore o impostare un limite. Il codice del ciclo procede semplicemente For Each
attraverso la raccolta fino a quando non viene completato.
In questo esempio vengono restituiti gli elementi della Request.ServerVariables
raccolta che contiene informazioni sul server Web. Usa un For Each
ciclo per visualizzare il nome di ogni elemento creando un nuovo <li>
elemento in un elenco puntato HTML.
<ul>
@For Each myItem In Request.ServerVariables
@<li>@myItem</li>
Next myItem
</ul>
La For Each
parola chiave è seguita da una variabile che rappresenta un singolo elemento della raccolta (nell'esempio , myItem
), seguito dalla parola chiave, seguita In
dalla raccolta che si desidera eseguire. Nel corpo del For Each
ciclo è possibile accedere all'elemento corrente usando la variabile dichiarata in precedenza.
Per creare un ciclo più generico, usare l'istruzione Do While
:
@Code
Dim countNum = 0
Do While countNum < 50
countNum += 1
@<p>Line #@countNum: </p>
Loop
End Code
Questo ciclo inizia con la Do While
parola chiave, seguita da una condizione, seguita dal blocco da ripetere. I cicli in genere incrementano (aggiungi a) o decremento (sottraendo da) una variabile o un oggetto usato per il conteggio. Nell'esempio l'operatore +=
aggiunge 1 al valore di una variabile ogni volta che viene eseguito il ciclo. Per decrerere una variabile in un ciclo che conta, si userà l'operatore -=
di decremento.
Oggetti e raccolte
Quasi tutto in un sito Web ASP.NET è un oggetto, inclusa la pagina Web stessa. Questa sezione illustra alcuni oggetti importanti che verranno usati di frequente nel codice.
Oggetti pagina
L'oggetto più semplice in ASP.NET è la pagina. È possibile accedere alle proprietà dell'oggetto pagina direttamente senza alcun oggetto qualificato. Il codice seguente ottiene il percorso del file della pagina, usando l'oggetto Request
della pagina:
@Code
Dim path = Request.FilePath
End Code
È possibile usare le proprietà dell'oggetto Page
per ottenere molte informazioni, ad esempio:
Request
. Come si è già visto, si tratta di una raccolta di informazioni sulla richiesta corrente, tra cui il tipo di browser che ha effettuato la richiesta, l'URL della pagina, l'identità dell'utente e così via.Response
. Si tratta di una raccolta di informazioni sulla risposta (pagina) che verrà inviata al browser al termine dell'esecuzione del codice del server. Ad esempio, è possibile usare questa proprietà per scrivere informazioni nella risposta.@Code ' Access the page's Request object to retrieve the URL. Dim pageUrl = Request.Url End Code <a href="@pageUrl">My page</a>
Oggetti raccolta (matrici e dizionari)
Un insieme è un gruppo di oggetti dello stesso tipo, ad esempio una raccolta di Customer
oggetti di un database. ASP.NET contiene molte raccolte predefinite, ad esempio la Request.Files
raccolta.
Spesso si usano i dati nelle raccolte. Due tipi di raccolta comuni sono la matrice e il dizionario. Una matrice è utile quando si vuole archiviare una raccolta di elementi simili, ma non si vuole creare una variabile separata per contenere ogni elemento:
<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
Con le matrici si dichiara un tipo di dati specifico, ad esempio String
, Integer
o DateTime
. Per indicare che la variabile può contenere una matrice, aggiungere parentesi al nome della variabile nella dichiarazione , ad esempio Dim myVar() As String
. È possibile accedere agli elementi in una matrice usando la relativa posizione (indice) o usando l'istruzione For Each
. Gli indici di matrice sono in base zero, ovvero il primo elemento si trova nella posizione 0, il secondo elemento si trova nella posizione 1 e così via.
@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
È possibile determinare il numero di elementi in una matrice ottenendone la Length
proprietà . Per ottenere la posizione di un elemento specifico nella matrice , ovvero per eseguire una ricerca nella matrice, usare il Array.IndexOf
metodo . È anche possibile eseguire operazioni come invertire il contenuto di una matrice (metodo Array.Reverse
) o ordinare il contenuto (il Array.Sort
metodo ).
Output del codice della matrice di stringhe visualizzato in un browser:
Un dizionario è una raccolta di coppie chiave/valore, in cui si specifica la chiave (o il nome) per impostare o recuperare il valore corrispondente:
@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>
Per creare un dizionario, usare la New
parola chiave per indicare che si sta creando un nuovo Dictionary
oggetto. È possibile assegnare un dizionario a una variabile usando la Dim
parola chiave . Si indicano i tipi di dati degli elementi nel dizionario usando le parentesi ( ( )
). Alla fine della dichiarazione, è necessario aggiungere un'altra coppia di parentesi, perché si tratta effettivamente di un metodo che crea un nuovo dizionario.
Per aggiungere elementi al dizionario, è possibile chiamare il Add
metodo della variabile dizionario (myScores
in questo caso) e quindi specificare una chiave e un valore. In alternativa, è possibile usare le parentesi per indicare la chiave ed eseguire un'assegnazione semplice, come nell'esempio seguente:
@Code
myScores("test4") = 79
End Code
Per ottenere un valore dal dizionario, specificare la chiave tra parentesi:
@myScores("test4")
Chiamata di metodi con parametri
Come illustrato in precedenza in questo articolo, gli oggetti programmati con hanno metodi. Ad esempio, un Database
oggetto potrebbe avere un Database.Connect
metodo . Molti metodi hanno anche uno o più parametri. Un parametro è un valore passato a un metodo per consentire al metodo di completare l'attività. Ad esempio, esaminare una dichiarazione per il Request.MapPath
metodo , che accetta tre parametri:
Public Overridable Function MapPath (virtualPath As String, _
baseVirtualDir As String, _
allowCrossAppMapping As Boolean)
Questo metodo restituisce il percorso fisico nel server che corrisponde a un percorso virtuale specificato. I tre parametri per il metodo sono virtualPath
, baseVirtualDir
e allowCrossAppMapping
. Si noti che nella dichiarazione i parametri vengono elencati con i tipi di dati che accetteranno. Quando si chiama questo metodo, è necessario specificare i valori per tutti e tre i parametri.
Quando si usa Visual Basic con la sintassi Razor, sono disponibili due opzioni per passare parametri a un metodo: parametri posizionali o parametri denominati. Per chiamare un metodo usando parametri posizionali, passare i parametri in un ordine rigoroso specificato nella dichiarazione del metodo. In genere si conosce questo ordine leggendo la documentazione per il metodo . È necessario seguire l'ordine e non è possibile ignorare alcun parametro, se necessario, passare una stringa vuota (""
) o Null per un parametro posizionale per cui non si dispone di un valore.
Nell'esempio seguente si presuppone che nel sito Web sia presente una cartella denominata scripts . Il codice chiama il Request.MapPath
metodo e passa i valori per i tre parametri nell'ordine corretto. Visualizza quindi il percorso mappato risultante.
@Code
' Pass parameters to a method using positional parameters.
Dim myPathPositional = Request.MapPath("/scripts", "/", true)
End Code
<p>@myPathPositional</p>
Quando sono presenti molti parametri per un metodo, è possibile mantenere il codice più pulito e leggibile usando parametri denominati. Per chiamare un metodo usando parametri denominati, specificare il nome del parametro seguito da :=
e quindi specificare il valore. Un vantaggio dei parametri denominati è che è possibile aggiungerli in qualsiasi ordine desiderato. Uno svantaggio è che la chiamata al metodo non è compatta.
Nell'esempio seguente viene chiamato lo stesso metodo riportato sopra, ma vengono usati parametri denominati per fornire i valori:
@Code
' Pass parameters to a method using named parameters.
Dim myPathNamed = Request.MapPath(baseVirtualDir:= "/", allowCrossAppMapping:= true, virtualPath:= "/scripts")
End Code
<p>@myPathNamed</p>
Come si può notare, i parametri vengono passati in un ordine diverso. Tuttavia, se si esegue l'esempio precedente e questo esempio, verranno restituiti lo stesso valore.
Gestione degli errori
istruzioni Try-Catch
Spesso si avranno istruzioni nel codice che potrebbero non riuscire per motivi esterni al controllo. Ad esempio:
- Se il codice tenta di aprire, creare, leggere o scrivere un file, potrebbero verificarsi tutti i tipi di errori. Il file desiderato potrebbe non esistere, potrebbe essere bloccato, il codice potrebbe non disporre delle autorizzazioni e così via.
- Analogamente, se il codice tenta di aggiornare i record in un database, possono verificarsi problemi di autorizzazioni, la connessione al database potrebbe essere eliminata, i dati da salvare potrebbero non essere validi e così via.
In termini di programmazione, queste situazioni sono chiamate eccezioni. Se il codice rileva un'eccezione, genera (genera) un messaggio di errore che è, al meglio, fastidioso per gli utenti.
Nelle situazioni in cui il codice potrebbe riscontrare eccezioni e, per evitare messaggi di errore di questo tipo, è possibile usare Try/Catch
le istruzioni . Nell'istruzione Try
si esegue il codice che si sta controllando. In una o più Catch
istruzioni è possibile cercare errori specifici (tipi specifici di eccezioni) che potrebbero essersi verificati. È possibile includere tutte Catch
le istruzioni necessarie per cercare gli errori previsti.
Nota
È consigliabile evitare di usare il Response.Redirect
metodo nelle Try/Catch
istruzioni, perché può causare un'eccezione nella pagina.
L'esempio seguente mostra una pagina che crea un file di testo nella prima richiesta e quindi visualizza un pulsante che consente all'utente di aprire il file. Nell'esempio viene usato deliberatamente un nome file non valido in modo che provocherà un'eccezione. Il codice include Catch
istruzioni per due possibili eccezioni: FileNotFoundException
, che si verifica se il nome del file non è valido e DirectoryNotFoundException
, che si verifica se ASP.NET non riesce nemmeno a trovare la cartella. È possibile rimuovere il commento da un'istruzione nell'esempio per vedere come viene eseguito quando tutto funziona correttamente.
Se il codice non ha gestito l'eccezione, viene visualizzata una pagina di errore simile alla schermata precedente. Tuttavia, la Try/Catch
sezione consente di impedire all'utente di visualizzare questi tipi di errori.
@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>