Úvod do ASP.NET webové programování pomocí syntaxe Razor (Visual Basic)
, autor: Tom FitzMacken
Tento článek obsahuje přehled programování s webovými stránkami ASP.NET pomocí syntaxe Razor a jazyka Visual Basic. ASP.NET je technologie společnosti Microsoft pro provozování dynamických webových stránek na webových serverech.
Co se naučíte:
- 8 nejlepších tipů pro programování ASP.NET webových stránek pomocí syntaxe Razor.
- Základní programovací koncepty, které budete potřebovat.
- Co ASP.NET kód serveru a syntaxi Razor.
Verze softwaru
- ASP.NET Webové stránky (Razor) 3
Tento kurz funguje také s webovými stránkami ASP.NET 2.
Většina příkladů použití ASP.NET webových stránek se syntaxí Razor používá jazyk C#. Syntaxe Razor ale podporuje také Jazyk Visual Basic. Chcete-li v jazyce Visual Basic naprogramovat ASP.NET webovou stránku, vytvořte webovou stránku s příponou souboru .vbhtml a pak přidejte kód jazyka Visual Basic. Tento článek obsahuje přehled práce s jazykem a syntaxí jazyka Visual Basic při vytváření ASP.NET webových stránek.
Poznámka
Výchozí šablony webů pro Microsoft WebMatrix (Pekárna, Fotogalerie a Úvodní web atd.) jsou k dispozici ve verzích C# a Visual Basic. Šablony jazyka Visual Basic můžete nainstalovat jako balíčky NuGet. Šablony webů se instalují do kořenové složky webu do složky s názvem Šablony Microsoftu.
8 nejlepších tipů pro programování
Tato část obsahuje několik tipů, které potřebujete znát, když začnete psát kód ASP.NET serveru pomocí syntaxe Razor.
1. Na stránku přidáte kód pomocí znaku @
Znak @
začíná vložené výrazy, bloky s jedním příkazem a bloky s více příkazy:
<!-- 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>
Výsledek zobrazený v prohlížeči:
Tip
Kódování HTML
Když na stránce zobrazíte obsah pomocí znaku @
, jako v předchozích příkladech, ASP.NET html kóduje výstup. Tím se nahradí rezervované znaky HTML (například <
a >
a &
) kódy, které umožňují, aby se znaky na webové stránce zobrazovaly jako znaky místo toho, aby se interpretovaly jako značky HTML nebo entity. Bez kódování HTML se výstup z kódu serveru nemusí zobrazit správně a může vystavit stránku bezpečnostním rizikům.
Pokud je vaším cílem výstup kódu HTML, který vykreslí značky jako značky (například <p></p>
pro odstavec nebo <em></em>
zvýraznění textu), přečtěte si část Kombinování textu, značek a kódu v blocích kódu dále v tomto článku.
Další informace o kódování HTML najdete v tématu Práce s formuláři HTML na webech ASP.NET webových stránek.
2. Bloky kódu uzavřete do kódu... Ukončit kód
Blok kódu obsahuje jeden nebo více příkazů kódu a je uzavřený s klíčovými slovy Code
a End Code
. Klíčové slovo otevření Code
umístěte hned za @
znak – nesmí mezi nimi být prázdné znaky.
<!-- 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>
Výsledek zobrazený v prohlížeči:
3. Uvnitř bloku ukončete každý příkaz kódu koncem řádku.
V bloku kódu jazyka Visual Basic končí každý příkaz koncem řádku. (Později v článku uvidíte způsob, jak v případě potřeby zabalit dlouhý příkaz kódu do více řádků.)
<!-- 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. K ukládání hodnot se používají proměnné.
Do proměnné můžete ukládat hodnoty, včetně řetězců, čísel a kalendářních dat atd. Novou proměnnou vytvoříte pomocí klíčového Dim
slova . Hodnoty proměnných můžete vložit přímo na stránku pomocí příkazu @
.
<!-- 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>
Výsledek zobrazený v prohlížeči:
5. Hodnoty řetězcových literálů uzavřete do dvojitých uvozovek.
Řetězec je posloupnost znaků, které jsou považovány za text. Pokud chcete zadat řetězec, uzavřete ho do dvojitých uvozovek:
@Code
Dim myString = "This is a string literal"
End Code
Chcete-li vložit dvojité uvozovky do řetězcové hodnoty, vložte dva znaky dvojitých uvozovek. Pokud chcete, aby se znak dvojitých uvozovek objevil jednou ve výstupu stránky, zadejte ho jako ""
v řetězci v uvozovkách, a pokud chcete, aby se zobrazil dvakrát, zadejte ho jako """"
v řetězci v uvozovkách.
<!-- Embedding double quotation marks in a string -->
@Code
Dim myQuote = "The person said: ""Hello, today is Monday."""
End Code
<p>@myQuote</p>
Výsledek zobrazený v prohlížeči:
6. V kódu jazyka Visual Basic se nerozlišuje velká a malá písmena.
Jazyk Visual Basic nerozlišuje velká a malá písmena. Programovací klíčová slova (například Dim
, If
a True
) a názvy proměnných (například myString
, nebo subTotal
) lze zapsat v každém případě.
Následující řádky kódu přiřazují hodnotu proměnné lastname
pomocí názvu malými písmeny a pak hodnotu proměnné vypíše na stránku pomocí názvu velkými písmeny.
@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>
Výsledek zobrazený v prohlížeči:
7. Velká část kódování zahrnuje práci s objekty.
Objekt představuje věc, kterou můžete programovat – stránku, textové pole, soubor, obrázek, webový požadavek, e-mailovou zprávu, záznam zákazníka (řádek databáze) atd. Objekty mají vlastnosti, které popisují jejich vlastnosti – objekt textového pole má Text
vlastnost, objekt požadavku vlastnost Url
, e-mailová zpráva má From
vlastnost a objekt zákazníka vlastnost FirstName
. Objekty mají také metody, které jsou "příkazy", které mohou provádět. Mezi příklady patří metoda objektu Save
souboru, metoda objektu Rotate
obrázku a metoda e-mailového objektu Send
.
Často budete pracovat s objektem Request
, který vám poskytne informace, jako jsou hodnoty polí formuláře na stránce (textová pole atd.), jaký typ prohlížeče vytvořil požadavek, adresa URL stránky, identita uživatele atd. Tento příklad ukazuje, jak získat přístup k vlastnostem objektu Request
a jak volat MapPath
metodu objektu Request
, která poskytuje absolutní cestu stránky na serveru:
<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>
Výsledek zobrazený v prohlížeči:
8. Můžete napsat kód, který se rozhoduje
Klíčovou funkcí dynamických webových stránek je to, že na základě podmínek můžete určit, co dělat. Nejběžnějším způsobem, jak to udělat, je If
příkaz (a volitelný Else
příkaz).
@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>
If IsPost
Příkaz je zkrácený způsob psaní If IsPost = True
. Spolu s If
příkazy existují různé způsoby testování podmínek, opakování bloků kódu atd., které jsou popsány dále v tomto článku.
Výsledek zobrazený v prohlížeči (po kliknutí na Odeslat):
Tip
Metody HTTP GET a POST a vlastnost IsPost
Protokol používaný pro webové stránky (HTTP) podporuje velmi omezený počet metod ("sloves"), které se používají k provádění požadavků na server. Dva nejběžnější jsou GET, který se používá ke čtení stránky, a POST, který se používá k odeslání stránky. Obecně platí, že když uživatel poprvé požádá o stránku, je stránka požadována pomocí příkazu GET. Pokud uživatel vyplní formulář a potom klikne na Odeslat, prohlížeč odešle požadavek POST na server.
Při programování na webu je často užitečné vědět, jestli se o stránku žádá jako GET nebo POST, abyste věděli, jak stránku zpracovat. Na webových stránkách ASP.NET můžete pomocí IsPost
vlastnosti zjistit, jestli je požadavek GET nebo POST. Pokud je požadavek POST, IsPost
vrátí vlastnost hodnotu true a můžete například číst hodnoty textových polí ve formuláři. Mnoho příkladů, které uvidíte, ukazuje, jak stránku zpracovat jinak v závislosti na hodnotě IsPost
.
Příklad jednoduchého kódu
Tento postup ukazuje, jak vytvořit stránku, která ilustruje základní techniky programování. V příkladu vytvoříte stránku, která uživatelům umožní zadat dvě čísla, pak je sečte a zobrazí výsledek.
V editoru vytvořte nový soubor a pojmenujte ho AddNumbers.vbhtml.
Zkopírujte na stránku následující kód a kód a nahraďte všechno, co už na stránce je.
@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>
Tady je pár věcí, které byste si měli poznamenat:
- Znak
@
začne první blok kódu na stránce a předcházítotalMessage
proměnné vložené v dolní části. - Blok v horní části stránky je uzavřený v
Code...End Code
. - Proměnné
total
, ,num1
num2
atotalMessage
ukládají několik čísel a řetězec. - Hodnota literálového řetězce přiřazená
totalMessage
proměnné je v uvozovkách. - Vzhledem k tomu, že kód jazyka Visual Basic nerozliňuje malá a velká písmena, při
totalMessage
použití proměnné v dolní části stránky stačí, aby její název odpovídal pouze pravopisu deklarace proměnné v horní části stránky. Na obalu nezáleží. - Výraz
num1.AsInt()
+num2.AsInt()
ukazuje, jak pracovat s objekty a metodami. MetodaAsInt
pro každou proměnnou převede řetězec zadaný uživatelem na celé číslo (celé číslo), které lze přidat. - Značka
<form>
obsahujemethod="post"
atribut . To určuje, že když uživatel klikne na Přidat, stránka se odešle na server pomocí metody HTTP POST. Po odeslání stránky se kódIf IsPost
vyhodnotí jako true a spustí se podmíněný kód, který zobrazí výsledek sčítání čísel.
- Znak
Uložte stránku a spusťte ji v prohlížeči. (Před spuštěním se ujistěte, že je stránka vybraná v pracovním prostoru Soubory .) Zadejte dvě celá čísla a klikněte na tlačítko Přidat .
Jazyk a syntaxe jazyka Visual Basic
Dříve jste viděli základní příklad, jak vytvořit ASP.NET webovou stránku a jak přidat kód serveru do kódu HTML. Zde se naučíte základy psaní kódu ASP.NET serveru pomocí syntaxe Razor , tj. pravidel programovacího jazyka, pomocí jazyka Visual Basic.
Pokud máte zkušenosti s programováním (zejména pokud jste používali C, C++, C#, Visual Basic nebo JavaScript), většina z toho, co tady čtete, bude povědomá. Pravděpodobně se budete muset seznámit pouze s tím, jak se kód WebMatrix přidává do značek v souborech .vbhtml .
Kombinování textu, značek a kódu v blocích kódu
V blocích kódu serveru budete často chtít na stránku vytvořit výstup textu a značky. Pokud blok kódu serveru obsahuje text, který není kódem a který by se místo toho měl vykreslovat tak, jak je, musí být ASP.NET schopný tento text odlišit od kódu. Existuje několik způsobů, jak to udělat.
Uzavřete text do elementu bloku HTML, jako je
<p></p>
nebo<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
Element HTML může obsahovat text, další elementy HTML a výrazy kódu serveru. Když ASP.NET uvidí počáteční značku HTML (například
<p>
), vykreslí v prohlížeči všechno, co element a jeho obsah je (a přeloží výrazy serverového kódu).@:
Použijte operátor nebo<text>
element . Výstupem@:
je jeden řádek obsahu, který obsahuje prostý text nebo chybějící značky HTML;<text>
element uzavírá více řádků výstupu. Tyto možnosti jsou užitečné, pokud nechcete vykreslit element HTML jako součást výstupu.@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
Následující příklad opakuje předchozí příklad, ale používá jeden pár značek
<text>
k uzavření textu, který se má vykreslit.@If IsPost Then @<text> The time is: <br /> @DateTime.Now @DateTime.Now is the <em>current</em> time. </text> End If
V následujícím příkladu
<text>
značky a</text>
ohraničí tři řádky, z nichž všechny obsahují text a chybějící značky HTML (<br />
), kód serveru a odpovídající značky HTML. Znovu můžete také před každým řádkem použít operátor zvlášť@:
. Funguje to v obou směrech.@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
Poznámka
Když vypíšete text, jak je znázorněno v této části – pomocí elementu HTML, operátoru
@:
nebo elementu<text>
– ASP.NET výstup kódovat ve formátu HTML. (Jak jsme uvedli dříve, ASP.NET kóduje výstup výrazů serverového kódu a bloků kódu serveru, kterým předchází@
, s výjimkou zvláštních případů uvedených v této části.)
Prázdné znaky
Nadbytečné mezery v příkazu (a mimo řetězcový literál) nemají na příkaz vliv:
@Code Dim personName = "Smith" End Code
Rozdělení dlouhých příkazů na více řádků
Dlouhý příkaz kódu můžete rozdělit na více řádků pomocí podtržítka _
(který se v jazyce Visual Basic nazývá znak pokračování) za každým řádkem kódu. Pokud chcete příkaz rozdělit na další řádek, přidejte na konec řádku mezeru a potom znak pokračování. Pokračujte příkazem na dalším řádku. Příkazy můžete zabalit na tolik řádků, kolik potřebujete, abyste zlepšili čitelnost. Následující příkazy jsou stejné:
@Code
Dim familyName _
= "Smith"
End Code
@Code
Dim _
theName _
= _
"Smith"
End Code
Nemůžete ale zalomit řádek uprostřed řetězcového literálu. Následující příklad nefunguje:
@Code
' Doesn't work.
Dim test = "This is a long _
string"
End Code
Pokud chcete zkombinovat dlouhý řetězec, který se zalamuje do více řádků jako výše uvedený kód, budete muset použít operátor zřetězení (&
), který uvidíte dále v tomto článku.
Komentáře ke kódu
Komentáře umožňují zanechat poznámky pro sebe nebo pro ostatní. Komentáře syntaxe Razor mají předponu @*
a končí na *@
.
@* A single-line comment is added like this example. *@
@*
This is a multiline code comment.
It can continue for any number of lines.
*@
V blocích kódu můžete použít komentáře syntaxe Razor nebo můžete použít běžný znak komentáře jazyka Visual Basic, což je jedna uvozovka ('
) s předponou každého řádku.
@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
Proměnné
Proměnná je pojmenovaný objekt, který používáte k ukládání dat. Proměnné můžete pojmenovat cokoli, ale název musí začínat abecedním znakem a nesmí obsahovat prázdné znaky ani vyhrazené znaky. Jak jste viděli dříve, v jazyce Visual Basic nezáleží na písmenech v názvu proměnné.
Proměnné a datové typy
Proměnná může mít konkrétní datový typ, který určuje, jaký druh dat je v proměnné uložený. Můžete mít řetězcové proměnné, které ukládají řetězcové hodnoty (například "Hello world"), celočíselné proměnné, které ukládají celočíselné hodnoty (například 3 nebo 79), a proměnné kalendářních dat, které ukládají hodnoty kalendářních dat v různých formátech (například 12. 4. 2012 nebo březen 2009). A existuje mnoho dalších datových typů, které můžete použít.
Nemusíte ale zadávat typ proměnné. Ve většině případů ASP.NET dokáže zjistit typ na základě toho, jak se data v proměnné používají. (Občas je nutné zadat typ; uvidíte příklady, kde to platí.)
Pokud chcete deklarovat proměnnou bez zadání typu, použijte Dim
plus název proměnné (například Dim myVar
). Pokud chcete deklarovat proměnnou typu, použijte Dim
plus název proměnné, za kterým As
následuje a pak název typu (například 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
Následující příklad ukazuje některé vložené výrazy, které používají proměnné na webové stránce.
@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>
Výsledek zobrazený v prohlížeči:
Převod a testování datových typů
I když ASP.NET obvykle dokáže určit datový typ automaticky, někdy ne. Proto možná budete muset ASP.NET pomoct provedením explicitního převodu. I když typy převádět nemusíte, někdy je užitečné otestovat, s jakým typem dat můžete pracovat.
Nejběžnějším případem je, že je nutné převést řetězec na jiný typ, například na celé číslo nebo datum. Následující příklad ukazuje typický případ, kdy je nutné převést řetězec na číslo.
@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
Uživatelský vstup zpravidla přichází jako řetězce. I když uživatele vyzvete, aby zadal číslo, a i když zadá číslici, když se uživatelský vstup odešle a vy ho přečtete v kódu, data budou v řetězcovém formátu. Proto je nutné převést řetězec na číslo. Pokud se v tomto příkladu pokusíte provést aritmetické operace hodnot bez převodu, dojde k následující chybě, protože ASP.NET nemůže přidat dva řetězce:
Cannot implicitly convert type 'string' to 'int'.
Chcete-li převést hodnoty na celá čísla, zavolejte metodu AsInt
. Pokud převod proběhne úspěšně, můžete čísla sečíst.
V následující tabulce jsou uvedeny některé běžné metody převodu a testování proměnných.
Metoda
Popis
Příklad
AsInt(), IsInt()
Převede řetězec, který představuje celé číslo (například "593"), na celé číslo.
Dim myIntNumber = 0
Dim myStringNum = "539"
If myStringNum.IsInt() Then
myIntNumber = myStringNum.AsInt()
End If
AsBool(), IsBool()
Převede řetězec jako "true" nebo "false" na logický typ.
Dim myStringBool = "True"
Dim myVar = myStringBool.AsBool()
AsFloat(), IsFloat()
Převede řetězec, který má desetinnou hodnotu jako "1,3" nebo "7,439", na číslo s plovoucí desetinnou čárkou.
Dim myStringFloat = "41.432895"
Dim myFloatNum = myStringFloat.AsFloat()
AsDecimal(), IsDecimal()
Převede řetězec, který má desetinnou hodnotu jako "1,3" nebo "7,439", na desetinné číslo. (V ASP.NET je desetinné číslo přesnější než číslo s plovoucí desetinnou čárkou.)
Dim myStringDec = "10317.425"
Dim myDecNum = myStringDec.AsDecimal()
AsDateTime(), IsDateTime()
Převede řetězec, který představuje hodnotu data a času, na typ ASP.NET DateTime
.
Dim myDateString = "12/27/2012"
Dim newDate = myDateString.AsDateTime()
ToString()
Převede jakýkoli jiný datový typ na řetězec.
Dim num1 As Integer = 17
Dim num2 As Integer = 76
' myString is set to 1776
Dim myString as String = num1.ToString() & _
num2.ToString()
Operátory
Operátor je klíčové slovo nebo znak, který ASP.NET říká, jaký druh příkazu má výraz provést. Visual Basic podporuje mnoho operátorů, ale abyste mohli začít s vývojem ASP.NET webových stránek, stačí jich rozpoznat jen několik. Následující tabulka shrnuje nejběžnější operátory.
Operátor
Popis
Příklady
+ - * /
Matematické operátory používané v číselných výrazech
@(5 + 13)
Dim netWorth = 150000
Dim newTotal = netWorth * 2
@(newTotal / 2)
=
Přiřazení a rovnost. V závislosti na kontextu buď přiřadí hodnotu na pravé straně příkazu objektu na levé straně, nebo zkontroluje rovnost hodnot.
Dim age = 17
Dim income = Request("AnnualIncome")
<>
Nerovnost. Vrátí hodnotu True
, pokud se hodnoty nerovnají.
Dim theNum = 13
If theNum <> 15 Then
' Do something.
End If
< > <= >=
Menší než, větší než, menší nebo rovno a větší než nebo rovno.
If 2 < 3 Then
' Do something.
End If
Dim currentCount = 12
If currentCount >= 12 Then
' Do something.
End If
&
Zřetězení, které se používá ke spojení řetězců.
' The displayed result is "abcdef".
@("abc" & "def")
+= -=
Operátory inkrementace a dekrementace, které přičítají a odečítají 1 (v uvedeném pořadí) z proměnné.
Dim theCount As Integer = 0
theCount += 1 ' Adds 1 to count
.
Dot. Slouží k rozlišení objektů a jejich vlastností a metod.
Dim myUrl = Request.Url
Dim count = Request("Count").AsInt()
()
Závorkách. Používá se k seskupení výrazů, k předávání parametrů metodám a k přístupu ke členům polí a kolekcí.
@(3 + 7)
@Request.MapPath(Request.FilePath)
Not
že nejste Vrátí hodnotu true na false a naopak. Obvykle se používá jako zkrácený způsob testování pro False
(to znamená pro ne True
).
Dim taskCompleted As Boolean = False
' Processing.
If Not taskCompleted Then
' Continue processing
End If
AndAlso OrElse
Logické funkce AND a OR, které slouží k propojení podmínek.
Dim myTaskCompleted As Boolean = false
Dim totalCount As Integer = 0
' Processing.
If (Not myTaskCompleted) AndAlso _
totalCount < 12 Then
' Continue processing.
End If
Práce s cestami k souborům a složkám v kódu
Často budete pracovat s cestami k souborům a složkám v kódu. Tady je příklad struktury fyzických složek pro web, jak se může zobrazit na vašem vývojovém počítači:
C:\WebSites\MyWebSite default.cshtml datafile.txt \images Logo.jpg \styles Styles.css
Tady jsou některé základní podrobnosti o adresách URL a cestách:
- Adresa URL začíná názvem domény (
http://www.example.com
) nebo názvem serveru (http://localhost
,http://mycomputer
). - Adresa URL odpovídá fyzické cestě na hostitelském počítači. Může například
http://myserver
odpovídat složce C:\websites\mywebsite na serveru. - Virtuální cesta je zkratka pro reprezentaci cest v kódu, aniž by bylo nutné zadávat úplnou cestu. Zahrnuje část adresy URL, která následuje za názvem domény nebo serveru. Při použití virtuálních cest můžete kód přesunout do jiné domény nebo serveru, aniž byste museli cesty aktualizovat.
Tady je příklad, který vám pomůže porozumět rozdílům:
Úplná adresa URL | http://mycompanyserver/humanresources/CompanyPolicy.htm |
---|---|
Název serveru | mycompanyserver |
Virtuální cesta | /humanresources/CompanyPolicy.htm |
Fyzická cesta | C:\mywebsites\humanresources\CompanyPolicy.htm |
Virtuální kořen je /, stejně jako kořen jednotky C: je . (Cesty virtuálních složek vždy používají lomítka.) Virtuální cesta ke složce nemusí mít stejný název jako fyzická složka. může to být alias. (Na produkčních serverech virtuální cesta zřídka odpovídá přesné fyzické cestě.)
Při práci se soubory a složkami v kódu je někdy potřeba odkazovat na fyzickou cestu a někdy na virtuální cestu v závislosti na objektech, se kterými pracujete. ASP.NET poskytuje tyto nástroje pro práci s cestami k souborům a složkám v kódu: metodu Server.MapPath
a operátor a Href
metodu~
.
Převod virtuálních na fyzické cesty: Metoda Server.MapPath
Metoda Server.MapPath
převede virtuální cestu (například /default.cshtml) na absolutní fyzickou cestu (například C:\WebSites\MyWebSiteFolder\default.cshtml). Tuto metodu použijete pokaždé, když potřebujete úplnou fyzickou cestu. Typickým příkladem je, když čtete nebo píšete textový soubor nebo soubor obrázku na webovém serveru.
Obvykle neznáte absolutní fyzickou cestu k webu na serveru hostitelského webu, takže tato metoda může převést cestu, kterou znáte – virtuální cestu – na odpovídající cestu na serveru za vás. Virtuální cestu k souboru nebo složce předáte metodě a ta vrátí fyzickou cestu:
@Code
Dim dataFilePath = "~/dataFile.txt"
End Code
<!-- Displays a physical path C:\Websites\MyWebSite\datafile.txt -->
<p>@Server.MapPath(dataFilePath)</p>
Odkazování na virtuální kořenový adresář: operátor ~ a metoda Href
V souboru .cshtml nebo .vbhtml můžete odkazovat na virtuální kořenovou cestu pomocí operátoru ~
. To je velmi užitečné, protože můžete přesouvat stránky na webu a žádné odkazy, které obsahují na jiné stránky, nebudou poškozené. Je to také užitečné pro případ, že byste někdy přesunuli web na jiné místo. Tady je několik příkladů:
@Code
Dim myImagesFolder = "~/images"
Dim myStyleSheet = "~/styles/StyleSheet.css"
End Code
Pokud je http://myserver/myapp
web , tady je postup, jak ASP.NET bude pracovat s těmito cestami při spuštění stránky:
myImagesFolder
:http://myserver/myapp/images
myStyleSheet
:http://myserver/myapp/styles/Stylesheet.css
(Ve skutečnosti tyto cesty neuvidíte jako hodnoty proměnné, ale ASP.NET bude s cestami zacházet, jako by to bylo.)
Operátor můžete použít ~
jak v kódu serveru (jak je uvedeno výše), tak ve značkách, například takto:
<!-- Examples of using the ~ operator in markup in ASP.NET Web Pages -->
<a href="~/Default">Home</a>
<img src="~/images/MyImages.png" />
Ve značkách pomocí operátoru ~
vytvoříte cesty k prostředkům, jako jsou soubory obrázků, jiné webové stránky a soubory CSS. Po spuštění stránky ASP.NET prohlédnou stránku (kód i revize) a přeloží všechny ~
odkazy na příslušnou cestu.
Podmíněná logika a smyčky
ASP.NET kód serveru umožňuje provádět úlohy na základě podmínek a psát kód, který opakuje příkazy určitou dobu, tedy kód, který spouští smyčku).
Testovací podmínky
K otestování jednoduché podmínky použijte If...Then
příkaz, který vrátí True
nebo False
na základě vámi zadaného testu:
@Code
Dim showToday = True
If showToday Then
DateTime.Today
End If
End Code
Klíčové If
slovo spustí blok. Skutečný test (podmínka) se řídí klíčovým slovem If
a vrátí hodnotu true nebo false. Příkaz If
končí na Then
. Příkazy, které se spustí, pokud je test pravdivý, jsou uzavřeny a If
End If
. Příkaz If
může obsahovat Else
blok, který určuje příkazy, které se mají spustit, pokud je podmínka nepravda:
@Code
Dim showToday = False
If showToday Then
DateTime.Today
Else
@<text>Sorry!</text>
End If
End Code
Pokud příkaz If
spustí blok kódu, nemusíte k zahrnutí bloků použít normální Code...End Code
příkazy. Stačí přidat @
do bloku a bude to fungovat. Tento přístup funguje s dalšími programovacími If
klíčovými slovy jazyka Visual Basic, za nimiž následují bloky kódu, včetně For
, For Each
, Do While
atd.
@If showToday Then
DateTime.Today
Else
@<text>Sorry!</text>
End If
Pomocí jednoho nebo více ElseIf
bloků můžete přidat více podmínek:
@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
Pokud v tomto příkladu není první podmínka v If
bloku pravdivá, je podmínka zaškrtnutá ElseIf
. Pokud je tato podmínka splněna, příkazy v ElseIf
bloku se spustí. Pokud není splněna žádná z podmínek, příkazy v Else
bloku se spustí. Můžete přidat libovolný počet ElseIf
bloků a zavřít Else
blok jako podmínku "všechno ostatní".
Pokud chcete otestovat velký počet podmínek, použijte Select Case
blok:
@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>
Testovaná hodnota je v závorkách (v příkladu je to proměnná den v týdnu). Každý jednotlivý test používá Case
příkaz, který vypíše hodnotu. Pokud hodnota Case
příkazu odpovídá testovací hodnotě, provede se kód v daném Case
bloku.
Výsledek posledních dvou podmíněných bloků zobrazených v prohlížeči:
Kód smyčky
Často je potřeba spouštět stejné příkazy opakovaně. Uděláte to pomocí smyčky. Často například spouštíte stejné příkazy pro každou položku v kolekci dat. Pokud přesně víte, kolikrát chcete smyčku provést, můžete použít smyčku For
. Tento druh smyčky je zvlášť užitečný pro odpočítávání nebo odpočítávání:
@For i = 10 To 20
@<p>Item #: @i</p>
Next i
Smyčka začíná klíčovým slovem For
následovaným třemi prvky:
- Okamžitě za příkazem
For
deklarujete proměnnou čítače (nemusíte používatDim
) a pak označíte rozsah, jako vi = 10 to 20
. To znamená, že proměnnái
začne počítat na hodnotě 10 a bude pokračovat, dokud nedosáhne hodnoty 20 (včetně). - Mezi příkazy
For
aNext
je obsah bloku. Může obsahovat jeden nebo více příkazů kódu, které se spouštějí s každou smyčkou. - Příkaz
Next i
ukončí smyčku. Zvýší čítač a spustí další iteraci smyčky.
Řádek kódu mezi řádky For
a Next
obsahuje kód, který se spouští pro každou iteraci smyčky. Kód pokaždé vytvoří nový odstavec (<p>
element) a přidá do výstupu čáru zobrazující hodnotu i (čítač). Když spustíte tuto stránku, příklad vytvoří 11 řádků zobrazující výstup, přičemž text na každém řádku označuje číslo položky.
Pokud pracujete s kolekcí nebo polem, často používáte smyčku For Each
. Kolekce je skupina podobných objektů a smyčka For Each
umožňuje provést úkol pro každou položku v kolekci. Tento typ smyčky je vhodný pro kolekce, protože na rozdíl od For
smyčky nemusíte čítač navyšovat ani nastavovat limit. Místo toho For Each
kód smyčky jednoduše prochází kolekci, dokud se nedokončí.
Tento příklad vrátí položky v kolekci Request.ServerVariables
(která obsahuje informace o vašem webovém serveru). Používá smyčku For Each
k zobrazení názvu každé položky vytvořením nového <li>
prvku v seznamu s odrážkami HTML.
<ul>
@For Each myItem In Request.ServerVariables
@<li>@myItem</li>
Next myItem
</ul>
Za For Each
klíčovým slovem následuje proměnná, která představuje jednu položku v kolekci (v příkladu myItem
), následovanou klíčovým slovem In
a kolekcí, kterou chcete procházet. V těle smyčky For Each
můžete k aktuální položce přistupovat pomocí proměnné, kterou jste deklarovali dříve.
Pokud chcete vytvořit smyčku pro obecné účely, použijte příkaz Do While
:
@Code
Dim countNum = 0
Do While countNum < 50
countNum += 1
@<p>Line #@countNum: </p>
Loop
End Code
Tato smyčka začíná klíčovým slovem Do While
, následovaným podmínkou a blokem, který se má opakovat. Smyčky obvykle inkrementují (přičítají) nebo dekretují (odečítají od) proměnné nebo objektu používaného k počítání. V tomto příkladu +=
operátor přidá hodnotu 1 k hodnotě proměnné při každém spuštění smyčky. (Chcete-li snížit proměnnou ve smyčce, která odpočítává, byste použili operátor -=
dekrementace .)
Objekty a kolekce
Téměř vše na ASP.NET webu je objekt, včetně samotné webové stránky. Tato část popisuje některé důležité objekty, se kterými budete v kódu často pracovat.
Objekty stránky
Nejzásadnějším objektem v ASP.NET je stránka. K vlastnostem objektu stránky můžete přistupovat přímo bez opravňujícího objektu. Následující kód získá cestu k souboru stránky pomocí objektu Request
stránky:
@Code
Dim path = Request.FilePath
End Code
Vlastnosti objektu Page
můžete použít k získání velkého množství informací, například:
Request
. Jak jste už viděli, jedná se o kolekci informací o aktuálním požadavku, včetně typu prohlížeče, který požadavek vytvořil, adresy URL stránky, identity uživatele atd.Response
. Jedná se o kolekci informací o odpovědi (stránce), které se po dokončení spuštění kódu serveru odešlou do prohlížeče. Tuto vlastnost můžete například použít k zápisu informací do odpovědi.@Code ' Access the page's Request object to retrieve the URL. Dim pageUrl = Request.Url End Code <a href="@pageUrl">My page</a>
Objekty kolekce (pole a slovníky)
Kolekce je skupina objektů stejného typu, například kolekce Customer
objektů z databáze. ASP.NET obsahuje mnoho předdefinovaných kolekcí, například kolekce Request.Files
.
Často budete pracovat s daty v kolekcích. Dva běžné typy kolekcí jsou pole a slovník. Pole je užitečné, když chcete uložit kolekci podobných položek, ale nechcete vytvořit samostatnou proměnnou pro každou položku:
<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
U polí deklarujete konkrétní datový typ, například String
, Integer
nebo DateTime
. Pokud chcete označit, že proměnná může obsahovat pole, přidejte k názvu proměnné v deklaraci závorky (například Dim myVar() As String
). K položkám v poli můžete přistupovat pomocí jejich pozice (indexu) nebo pomocí For Each
příkazu . Indexy pole jsou založené na nule – to znamená, že první položka je na pozici 0, druhá položka je na pozici 1 atd.
@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
Počet položek v poli můžete určit tak, že získáte jeho Length
vlastnost. Pokud chcete získat pozici konkrétní položky v poli (tj. prohledávat pole), použijte metodu Array.IndexOf
. Můžete také provádět akce, jako je obrácení obsahu pole ( Array.Reverse
metoda) nebo řazení obsahu ( Array.Sort
metoda).
Výstup kódu pole řetězců zobrazený v prohlížeči:
Slovník je kolekce dvojic klíč/hodnota, ve které zadáte klíč (nebo název) pro nastavení nebo načtení odpovídající hodnoty:
@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>
Pokud chcete vytvořit slovník, použijete New
klíčové slovo k označení, že vytváříte nový Dictionary
objekt. Slovník můžete proměnné přiřadit pomocí klíčového Dim
slova . Datové typy položek ve slovníku označíte pomocí závorek ( ( )
). Na konec deklarace musíte přidat další dvojici závorek, protože se ve skutečnosti jedná o metodu, která vytvoří nový slovník.
Chcete-li přidat položky do slovníku, můžete volat metodu Add
proměnné slovníku (myScores
v tomto případě) a pak zadat klíč a hodnotu. Alternativně můžete klíč označit pomocí závorek a provést jednoduché přiřazení jako v následujícím příkladu:
@Code
myScores("test4") = 79
End Code
Pokud chcete získat hodnotu ze slovníku, zadejte klíč do závorek:
@myScores("test4")
Volání metod s parametry
Jak jste viděli dříve v tomto článku, objekty, které programujete, mají metody. Database
Například objekt může mít metodu Database.Connect
. Mnoho metod má také jeden nebo více parametrů. Parametr je hodnota, kterou předáte metodě, aby metoda mohla dokončit svůj úkol. Podívejte se například na deklaraci Request.MapPath
metody , která přebírá tři parametry:
Public Overridable Function MapPath (virtualPath As String, _
baseVirtualDir As String, _
allowCrossAppMapping As Boolean)
Tato metoda vrátí fyzickou cestu na serveru, která odpovídá zadané virtuální cestě. Tři parametry pro metodu jsou virtualPath
, baseVirtualDir
a allowCrossAppMapping
. (Všimněte si, že v deklaraci jsou parametry uvedené s datovými typy dat, které budou přijímat.) Při volání této metody musíte zadat hodnoty pro všechny tři parametry.
Pokud používáte Visual Basic se syntaxí Razor, máte dvě možnosti pro předávání parametrů metodě: poziční parametry nebo pojmenované parametry. Pokud chcete volat metodu pomocí pozičních parametrů, předáte parametry ve striktním pořadí, které je zadáno v deklaraci metody. (Toto pořadí obvykle znáte z dokumentace k metodě.) Musíte postupovat podle pořadí a nemůžete přeskočit žádný z parametrů – v případě potřeby předáte prázdný řetězec (""
) nebo hodnotu null pro poziční parametr, pro který nemáte hodnotu.
Následující příklad předpokládá, že na webu máte složku s názvem scripts . Kód volá metodu Request.MapPath
a předává hodnoty tří parametrů ve správném pořadí. Pak zobrazí výslednou namapovanou cestu.
@Code
' Pass parameters to a method using positional parameters.
Dim myPathPositional = Request.MapPath("/scripts", "/", true)
End Code
<p>@myPathPositional</p>
Pokud je pro metodu mnoho parametrů, můžete pomocí pojmenovaných parametrů udržovat kód čistější a čitelnější. Pokud chcete volat metodu pomocí pojmenovaných parametrů, zadejte název :=
parametru a pak zadejte hodnotu . Výhodou pojmenovaných parametrů je, že je můžete přidat v libovolném pořadí. (Nevýhodou je, že volání metody není tak kompaktní.)
Následující příklad volá stejnou metodu jako výše, ale k zadání hodnot používá pojmenované parametry:
@Code
' Pass parameters to a method using named parameters.
Dim myPathNamed = Request.MapPath(baseVirtualDir:= "/", allowCrossAppMapping:= true, virtualPath:= "/scripts")
End Code
<p>@myPathNamed</p>
Jak vidíte, parametry se předávají v jiném pořadí. Pokud ale spustíte předchozí příklad a tento příklad, vrátí se stejná hodnota.
Zpracování chyb
Try-Catch příkazy
Často budete mít v kódu příkazy, které můžou selhat z důvodů, které jsou mimo vaši kontrolu. Příklad:
- Pokud se váš kód pokusí otevřít, vytvořit, přečíst nebo zapsat soubor, může dojít k nejrůznějším chybám. Požadovaný soubor nemusí existovat, může být uzamčený, kód nemusí mít oprávnění atd.
- Podobně platí, že pokud se váš kód pokusí aktualizovat záznamy v databázi, může docházet k problémům s oprávněními, může dojít k ukončení připojení k databázi, uložená data můžou být neplatná atd.
Z programovacího hlediska se těmto situacím říká výjimky. Pokud váš kód narazí na výjimku, vygeneruje (vyvolá) chybovou zprávu, která je v nejlepším případě pro uživatele obtěžující.
V situacích, kdy váš kód může narazit na výjimky, a aby se zabránilo chybové zprávy tohoto typu, můžete použít Try/Catch
příkazy. V příkazu Try
spustíte kód, který kontrolujete. V jednom nebo více Catch
příkazech můžete vyhledat konkrétní chyby (konkrétní typy výjimek), ke kterým mohlo dojít. Můžete zahrnout tolik Catch
příkazů, kolik potřebujete, abyste vyhledali chyby, které očekáváte.
Poznámka
Doporučujeme nepoužívat metodu Response.Redirect
v Try/Catch
příkazech, protože to může způsobit výjimku na vaší stránce.
Následující příklad ukazuje stránku, která při prvním požadavku vytvoří textový soubor a pak zobrazí tlačítko, které uživateli umožní soubor otevřít. V příkladu se záměrně používá chybný název souboru, aby způsobil výjimku. Kód obsahuje Catch
příkazy pro dvě možné výjimky: FileNotFoundException
, ke kterým dochází, pokud je název souboru chybný, a DirectoryNotFoundException
, ke kterému dochází, pokud ASP.NET nemůže najít ani složku. (Příkaz v příkladu můžete odkomentovat, abyste viděli, jak funguje, když všechno funguje správně.)
Pokud váš kód nezpracoval výjimku, zobrazí se chybová stránka jako na předchozím snímku obrazovky. Tato Try/Catch
část ale pomáhá zabránit tomu, aby se uživateli tyto typy chyb zobrazovaly.
@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>