Visual Basic ve webových stránkách ASP.NET

 
 

 

Tato příloha přináší přehled programování webových stránek ASP.NET v jazyce Visual Basic s použitím syntaxe Razor.

Příklady kódu ASP.NET využívající syntaxi Razor jsou v této knize založeny na programovacím jazyku C#. Syntaxi Razor podporuje ale i programovací jazyk Visual Basic. Při programování stránky v jazyce Visual Basic je vytvořena webová stránka s příponou VBHTML, do které je následně přidán kód programovacího jazyka Visual Basic. V této příloze najdete přehled, jak s použitím jazyka Visual Basic a jeho syntaxe vytvářet webové stránky ASP.NET.

Co se naučíte:

 

 

8 nejlepších tipů pro programování

V této části je uvedeno několik tipů, které musíte bezpodmínečně znát, pokud začínáte psát serverový kód ASP.NET s použitím syntaxe Razor.

1. Přidání kódu do stránky pomocí znaku @

Znak @ uvozuje inline výrazy, bloky obsahující jeden příkaz nebo bloky s více příkazy:


<!-- Blok s jedním příkazem  --> 
@Code  Dim total = 7  End Code 
@Code  Dim myMessage = "Hello World" End Code 
 
<!-- Inline výrazy --> 
<p>The value of your account is: @total </p> 
<p>The value of myMessage is: @myMessage</p>         
     

<!-- Blok s více příkazy -->     
@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:

vb-1

2. Bloky kódu jsou ohraničeny klíčovými slovy Code...End Code.

Blok kódu zahrnuje jeden nebo více příkazů a je ohraničen klíčovými slovy CodeEnd Code. Počáteční klíčové slovo Code je nutné umístit bezprostředně za znak @ — nesmí mezi nimi být mezery.

<!-- Blok s jedním příkazem  --> 
@Code 
    Dim theMonth = DateTime.Now.Month 
End Code 
<p>The numeric value of the current month: @theMonth</p> 
 
<!-- Blok s více příkazy --> 
@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:

vb-2

3. Uvnitř bloku jsou příkazy kódu ukončeny koncem řádku

V bloku kódu jazyka Visual Basic jsou jednotlivé příkazy ukončeny koncem řádku. (V další části této kapitoly se dozvíte, jak v případě potřeby zalomit dlouhé příkazy kódu na více řádků.)

<!-- Blok s jedním příkazem --> 
@Code 
    Dim theMonth = DateTime.Now.Month 
End Code 
 
<!-- Blok s více příkazy --> 
@Code 
    Dim outsideTemp = 79 
    Dim weatherMessage = "Hello, it is " & outsideTemp & " degrees." 
End Code  
 
<!-- Inline výraz, konec řádku není zapotřebí. --> 
<p>Today's weather: @weatherMessage</p>

4. Použití proměnných pro ukládání hodnot

Hodnoty, jako jsou řetězce, čísla, datumy atd., můžete ukládat v proměnných. Nová proměnná je vytvořena pomocí klíčového slova Dim. Hodnoty proměnných je možné vkládat přímo do stránky pomocí znaku @.


<!-- Uložení řetězce --> 
@Code  
    Dim welcomeMessage = "Welcome, new members!" 
End Code 
<p>@welcomeMessage</p> 
     

<!-- Uložení data --> 
@Code  
    Dim year = DateTime.Now.Year 
End Code 
 
<!-- Zobrazení proměnné --> 
<p>Welcome to our new members who joined in @year!</p>

Výsledek zobrazený v prohlížeči:

vb-3

5. Ohraničení řetězcových literálů dvojitými uvozovkami

Řetězec je sekvence znaků, které jsou chápány jako text. Řetězec je určen tím, že je ohraničen dvojitými uvozovkami:

@Code  
    Dim myString = "This is a string literal" 
End Code

Dvojité uvozovky je možné vložit do řetězcové hodnoty pomocí dvou znaků dvojitých uvozovek. Pokud budete znak dvojitých uvozovek chtít zobrazit ve výstupu stránky jedenkrát, zadejte ho v rámci uvozovkami ohraničeného řetězce jako sekvenci "". Budete-li ho chtít zobrazit dvakrát, v rámci uvozovkami ohraničeného řetězce zadejte sekvenci """".


<!-- Vložení dvojitých uvozovek do řetězce --> 
@Code  
    Dim myQuote = "The person said: ""Hello, today is Monday.""" 
End Code 
<p>@myQuote</p>

Výsledek zobrazený v prohlížeči:

vb-4

6. V kódu jazyka Visual Basic nejsou rozlišována velká a malá písmena.

V jazyce Visual Basic nejsou rozlišována velká a malá písmena. Klíčová slova programovacího jazyka (například Dim, If nebo True) a názvy proměnných (například myString nebo subTotal) je možné napsat s použitím malých či velkých písmen.

V následujících řádcích kódu je při přiřazení hodnoty proměnné lastname (příjmení) název proměnné zapsán malými písmeny, a poté při zobrazení hodnoty proměnné na stránce je název proměnné zapsán velkými písmeny.

@Code  
    Dim lastName = "Smith" 
    ' V klíčových slovech jako například dim nejsou rozlišována velká a malá písmena. 
    DIM someNumber = 7 
End Code 
<p>The value of the <code>lastName</code> variable is: @LASTNAME</p>

Výsledek zobrazený v prohlížeči:

vb-5

7. Vytváření kódu z velké části zahrnuje práci s objekty.

Objekt představuje něco, co můžete použít ve svém programu — stránku, textové pole, soubor, obrázek, webový požadavek, e-mailovou zprávu, záznam zákazníka (řádek v databázi) atd. Objekty mají vlastnosti popisující jejich charakteristiky — textové pole má vlastnost Text, objekt požadavku má vlastnost Url, e-mailová zpráva má vlastnost From (Od) a objekt zákazníka má vlastnost FirstName (Křestní jméno). Objekty mají také metody, což jsou „slovesa“, která mohou vykonávat určité operace. Mezi příklady patří metoda Save (Uložit) objektu souboru, metoda Rotate (Otočit) objektu obrázku nebo metoda Send (Odeslat) objektu e-mailové zprávy.

Často budete pracovat s objektem Request (Požadavek), který poskytuje informace jako například hodnoty polí formulářů na stránce (textová pole atd.), typ prohlížeče, který požadavek zaslal, adresa URL stránky, identita uživatele atd. Tento příklad ukazuje, jak přistupovat k vlastnostem objektu Request a jak volat metodu MapPath (Mapovat cestu) objektu Request, která poskytuje absolutní cestu ke stránce 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:

vb-6

8. Můžete psát kód, který provádí rozhodování.

Klíčovou vlastností dynamických stránek je to, že na základě podmínek můžete rozhodnout, co se bude vykonávat. Nejčastějším způsobem, jak toho docílit, je použití příkazu If (a volitelného příkazu 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>

Příkaz If IsPost je zkráceným zápisem příkazu If IsPost = True. Kromě příkazů If existuje celá řada možností testování podmínek, opakování bloků kódu atd., které jsou popsány v dalších částech této kapitoly.

Výsledek zobrazený v prohlížeči po kliknutí na tlačítko Submit (Odeslat):

vb-7

Jednoduchý příklad kódu

Tento postup ukazuje, jak vytvořit stránku ilustrující základní techniky programování. V tomto příkladu vytvoříte stránku, která uživatelům umožní zadat dvě čísla, poté je sečte a zobrazí výsledek.

  1. Ve svém editoru vytvořte nový soubor a nazvěte jej AddNumbers.vbhtml.
  2. Nahraďte veškerý obsah stránky tím, že zkopírujete následující kód a značky.
    @Code 
        Dim total = 0 
        Dim totalMessage = "" 
        if IsPost Then 
            ' Načtení čísel zadaných uživatelem 
            Dim num1 = Request("text1") 
            Dim num2 = Request("text2") 
            ' Převod zadaných řetězců na celá čísla a jejich sečtení 
            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>

    Povšimněte si několika věcí:

  3. Stránku uložte a spusťte ji v prohlížeči. (Před jejím spuštěním ověřte, zda je stránka vybrána v pracovním prostředí Files – Soubory.) Zadejte dvě celá čísla a pak klikněte na tlačítko Add (Sečíst).

    vb-8

Jazyk Visual Basic a jeho syntaxe

kapitole 1 – Začínáme se sadou WebMatrix a webovými stránkami ASP.NET jste měli možnost seznámit se s jednoduchých příkladem toho, jak vytvořit stránku ASP.NET a jak mezi značky jazyka HTML přidat serverový kód. Zde si můžete osvojit základy použití jazyka Visual Basic pro vytváření serverového kódu ASP.NET s použitím syntaxe Razor — tedy pravidla programovacího jazyka.

Pokud máte zkušenosti s programováním (zejména pokud jste někdy použili jazyk C, C++, C#, Visual Basic nebo JavaScript), budete již znát velkou část toho, co je zde uvedeno. Budete vám nejspíš stačit seznámit se jen s tím, jak je kód sady WebMatrix přidáván do kódu značkovacího jazyka v souborech VBHTML.

Základní syntaxe

Spojení textu, značek a kódu v blocích kódu

V blocích serverového kódu budete často chtít přidat do výstupu stránky text a kód značkovacího jazyka. Pokud blok serverového kódu obsahuje text, který není programovým kódem, ale měl by naopak být vykreslen tak, jak je, technologie ASP.NET musí být schopna rozlišit tento text od kódu. Toho je možné dosáhnout několika různými způsoby.

Prázdné znaky

Nadbytečné mezery v příkazu (a vně řetězcového literálu) nemají na příkaz žádný vliv:

@Code Dim personName =    "Smith"    End Code

Zalomení dlouhých příkazů kódu na více řádků

Dlouhé příkazy kódu je možné zalomit na více řádků pomocí podtržítka _ (které se v jazyce Visual Basic nazývá znak pokračování řádku), které je třeba umístit na konec každého řádku. Pokud chcete příkaz zalomit na další řádek, přidejte na konec řádku mezeru a po ní znak pokračování řádku. Příkaz pokračuje na dalším řádku. Pro zlepšení čitelnosti je možné příkazy zalomit na libovolný počet řádků. Následující dva příkazy jsou shodné:

@Code 
    Dim familyName _ 
    =  "Smith"  
End Code 
 
@Code 
    Dim _ 
    theName _ 
    = _ 
    "Smith" 
End Code

Řádky ale není možné zalamovat uprostřed řetězcového literálu. Následující příklad nebude fungovat:

@Code  
    ' Nebude fungovat. 
    Dim test = "This is a long _ 
      string" 
End Code

Dlouhé řetězce, které pokračují na více řádcích jako ve výše uvedeném kódu, je možné sloučit pomocí operátoru zřetězení (&), se kterým se seznámíte v další části této kapitoly.

Komentáře kódu

Pomocí komentářů můžete zanechávat poznámky sami pro sebe či pro své kolegy. Komentáře využívající syntaxi Razor jsou uvozeny znaky @* a ukončeny znaky *@.

@* Komentáře nepřekračující jeden řádek je možné přidat stejně jako tento příklad. *@ 
     
@* 
    Toto je  komentář rozdělený na více řádků.  
    Může pokračovat na libovolném počtu řádků. 
*@      

V rámci bloků kódu je možné použít komentáře využívající syntaxi Razor nebo před každý řádek přidat obyčejný znak komentáře jazyka Visual Basic, kterým jsou jednoduché uvozovky (').

@Code 
    
' Komentáře můžete psát v blocích tak, že před každým řádkem uvedete znak '.
 End Code      
@Code 
    ' V jazyce Visual Basic neexistuje znak pro víceřádkové komentáře.  
    ' Znak  ' je nutné použít před každým řádkem, na kterém má být uveden komentář.  
End Code

Proměnné

Proměnná je pojmenovaný objekt, který slouží k ukládání dat. Proměnné mohou mít libovolný název, který ale musí začínat abecedním znakem a nesmí obsahovat mezery ani vyhrazené znaky. Jak jste už viděli v předchozí části, v jazyce Visual Basic nezáleží na tom, zda jsou názvy proměnných zapsány s použitím malých nebo velkých písmen.

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. Je možné mít řetězcové proměnné, které slouží k ukládání řetězcových hodnot (např. "Hello world"), celočíselné proměnné, které slouží k ukládání celočíselných hodnot (např. 3 nebo 79), nebo proměnné, které je možné použít pro uložení data v celé řadě formátů (např. 4/12/2010 nebo March 2009). Je možné také použít celou řadu dalších datových typů. Typ proměnné ale není nutné určit. Technologie ASP.NET ve většině případů dokáže typ odvodit na základě toho, jak jsou data v proměnné používána. (Občas je nutné typ určit. V této knize najdete příklady, ve kterých tomu tak je.)

Pro deklaraci proměnné bez určení typu slouží klíčové slovo Dim, po kterém následuje název proměnné (například Dim myVar). Pro deklaraci proměnné s určením jejího typu slouží klíčové slovo Dim spolu s názvem proměnné, po nich následuje klíčové slovo As a poté název typu (například Dim myVar As String).

@Code 
    ' Přiřazení řetězce proměnné 
    Dim greeting = "Welcome"  
     
    ' Přiřazení čísla proměnné 
    Dim theCount = 3 
     
    ' Přiřazení výrazu proměnné 
    Dim monthlyTotal = theCount + 5 
     
    ' Přiřazení data proměnné 
    Dim today = DateTime.Today 
     
    ' Přiřazení aktuální adresy URL stránky proměnné 
    Dim myPath = Request.Url 
     
    ' Deklarace proměnných s použitím explicitních datových typů 
    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 použití proměnných v inline výrazech ve webových stránkách.

@Code 
    ' Vložení hodnoty proměnné mezi značky jazyka HTML 
    ' Kód značkovacího jazyka musíme uvést znakem @, protože se nacházíme uvnitř bloku programového kódu. 
    @<p>@greeting, friends!</p> 
End Code 
 
<!-- Použití proměnné v inline výrazu v kódu značkovacího jazyka HTML -->  
<p>The predicted annual total is: @( monthlyTotal * 12)</p> 
 
<!--  Zobrazení adresy URL stránky pomocí proměnné -->  
<p>The URL to this page is:  @myPath</p>

Výsledek zobrazený v prohlížeči:

vb-9

Převod a testování datových typů

Technologie ASP.NET obvykle dokáže stanovit datový typ automaticky, někdy tomu tak ale není. Může být proto nutné technologii ASP.NET pomoci provedením explicitního převodu. I pokud není nutné typy převádět, může někdy být užitečné přesvědčit se pomocí testu, s jakým typem dat pracujete.

Nejčastějším případem je převod řetězce na jiný typ, například celočíselnou hodnotu nebo datum. Následující příklad zachycuje typický případ, kdy je nutné převést řetězec na číslo.

@Code 
    Dim total = 0 
    Dim totalMessage = "" 
    if IsPost Then 
        ' Načtení čísel zadaných uživatelem 
        Dim num1 = Request("text1") 
        Dim num2 = Request("text2") 
        ' Převod zadaných řetězců na celá čísla a jejich sečtení 
        total = num1.AsInt() + num2.AsInt() 
        totalMessage = "Total = " & total 
    End If 
End Code 

Platí, že vstup uživatele je přejímán jako řetězec. I pokud jste uživatele vyzvali k zadání čísla a ten skutečně zadal číslice, po odeslání vstupu uživatele a jeho načtení v kódu jsou data ve formátu řetězce. Proto je nutné řetězec převést na číslo. Pokud byste se v tomto příkladu pokoušeli s hodnotami provést aritmetickou operaci bez jejich převodu, nastala by následující chyba, protože technologie ASP.NET nemůže sčítat dva řetězce:

Typ string nelze implicitně převést na typ int.

Hodnoty na celá čísla převedete voláním metody AsInt. Pokud je převod úspěšný, můžete pak čísla sečíst.

V následující tabulce jsou uvedeny běžně používané metody pro převody a testování.

Metoda Popis Příklad
AsInt(),
IsInt()
Převádí řetězec představující celé číslo (například "593") na typ integer.
Dim myIntNumber = 0 
Dim myStringNum = "539" 
If myStringNum.IsInt() Then 
    myIntNumber = myStringNum.AsInt() 
End If
AsBool(),
IsBool()
Převádí řetězec, například "true" nebo "false", na hodnotu typu Boolean.
Dim myStringBool = "True" 
Dim myVar = myStringBool.AsBool()
AsFloat(),
IsFloat()
Převádí řetězec obsahující desetinnou hodnotou, například "1.3" nebo "7.439", na číslo s plovoucí desetinnou čárkou.
Dim myStringFloat = "41.432895" 
Dim myFloatNum = myStringFloat.AsFloat()
AsDecimal(),
IsDecimal()
Převádí řetězec obsahující desetinnou hodnotou, například "1.3" nebo "7.439", na desetinné číslo. (Při použití technologie ASP.NET má desetinné číslo větší přesnost než číslo s plovoucí desetinnou čárkou.)
Dim myStringDec = "10317.425" 
Dim myDecNum = myStringDec.AsDecimal()
AsDateTime(),
IsDateTime()
Převádí řetězec představující datum a čas na typ DateTime technologie ASP.NET.
Dim myDateString = "12/27/2010" 
Dim newDate = myDateString.AsDateTime()
ToString() Převádí libovolný jiný datový typ na řetězec.
Dim num1 As Integer = 17 
Dim num2 As Integer = 76 
 
' nastavení proměnné myString na hodnotu 1776 
Dim myString as String = num1.ToString() & num2.ToString()

Operátory

Tady pokračovat Operátor je klíčové slovo nebo znak, pomocí něhož technologie ASP.NET pozná, jaký druh příkazu má ve výrazu provést. Jazyk Visual Basic podporuje mnoho operátorů, ale k tomu, abyste mohli začít vyvíjet webové stránky ASP.NET, vám stačí poznat jen několik z nich. V následující tabulce najdete přehled nejběžnějších operátorů.

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. Podle kontextu buď přiřadí hodnotu na pravé straně příkazu objektu na straně levé, nebo ověří, zda se hodnoty rovnají.
Dim age = 17 
 
Dim income = Request("AnnualIncome")
<> Nerovnost. Vrací hodnotu True (pravda), pokud si hodnoty nejsou rovny.
Dim theNum = 13 
If theNum <> 15 Then 
    ' Něco provedeme. 
End If
<
>
<=
>=
Menší než,
větší než,
menší než nebo rovno
a větší než nebo rovno.
If 2 < 3 Then 
    ' Něco provedeme. 
End If 
 
Dim currentCount = 12 
If currentCount >= 12 Then 
    ' Něco provedeme. 
End If
& Zřetězení. Slouží ke spojování řetězců.
' Zobrazený výsledek je "abcdef". 
@("abc" & "def")
+=
-=
Operátory inkrementace a dekrementace, které k proměnné přičítají, respektive od ní odečítají hodnotu 1.
Dim theCount As Integer = 0 
theCount += 1 ' Přičte hodnotu 1 k proměnné theCount. 
. Tečka. Slouží pro rozlišení objektů a jejich vlastností nebo metod.
Dim myUrl = Request.Url 
Dim count = Request("Count").AsInt()
() Závorky. Slouží k seskupování výrazů, k předávání parametrů metodám a k přístupu k položkám polí nebo kolekcí.
@(3 + 7) 
 
@Request.MapPath(Request.FilePath)
Not Zápor. Mění hodnotu true (pravda) na hodnotu false (nepravda) a naopak. Často je používán jako rychlý způsob testování hodnoty False (tedy opaku hodnoty True).
Dim taskCompleted As Boolean = False 
' Probíhá zpracování. 
If Not taskCompleted Then  
    ' Pokračovat ve zpracování 
End If
AndAlso
OrElse
Logické operátory A a NEBO, které slouží ke spojování podmínek.
Dim myTaskCompleted As Boolean = false 
Dim totalCount As Integer = 0           
' Probíhá zpracování. 
If (Not myTaskCompleted) AndAlso totalCount < 12 Then  
    ' Pokračovat ve zpracování 
End If 

Práce s cestami k souborům a složkám v kódu

Ve svém kódu budete často pracovat s cestami k souborům nebo složkám. Následuje příklad fyzické struktury složek webu, jak by mohla vypadat na počítači používaném pro vývoj:

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

Na webovém serveru má web také virtuální strukturu složek, která odpovídá fyzickým složkám na webu (je na ně mapována). (Virtuální cestu je lze chápat jako část adresy URL, která následuje za názvem domény.) Ve výchozím nastavení se názvy virtuálních složek shodují s názvy složek fyzických. Virtuální kořen je zastoupen lomítkem (/), stejně jako je kořenová složka disku C: počítače zastoupena zpětným lomítkem (\). (Ve virtuálních cestách ke složkám jsou vždy používána dopředná lomítka.) Toto jsou fyzické a virtuální cesty k souboru StyleSheet.css z výše zobrazené struktury:

Při práci se soubory a složkami v kódu je někdy nutné odkazovat se na fyzickou cestu, a jindy na cestu virtuální podle toho, s jakými soubory pracujeme. ASP.NET poskytuje tyto nástroje pro práci s cestami k souborům a složkám v kódu: operátor ~, metodu Server.MapPath a metodu Href.

Operátor ~: získání virtuální kořenové složky

V serverovém kódu pro specifikaci virtuální kořenové cesty ke složkám a souborům slouží operátor ~. Toho lze s výhodou využít k přesunutí webu do jiné složky nebo na jiné místo, aniž by v kódu došlo k porušení cest.

@Code 
    Dim myImagesFolder = "/images" 
    Dim myStyleSheet = "/styles/StyleSheet.css"        
End Code

Metoda Server.MapPath: převod virtuální cesty na fyzickou

Metoda Server.MapPath (Mapovat cestu) převádí virtuální cestu (například /default.cshtml) na absolutní fyzickou cestu (například C:\WebSites\MyWebSiteFolder\default.cshtml). Tuto metodu je možné použít pro úlohy vyžadující úplnou fyzickou cestu, například čtení z textového souboru na webovém serveru nebo zápis do něj. (Vývojář obvykle nezná absolutní fyzickou cestu webu na serveru, na kterém je web hostován.) Metodě je předána virtuální cesta k souboru nebo ke složce a vrací fyzickou cestu:

@Code 
    Dim dataFilePath = "/dataFile.txt" 
End Code     
 
<!-- Zobrazí fyzickou cestu C:\Websites\MyWebSite\datafile.txt  -->  
<p>@Server.MapPath(dataFilePath)</p>

Metoda Href: vytváření cest k prostředkům webu

Metoda Href objektu WebPage (Webová stránka) převádí cesty vytvořené v serverovém kódu (které mohou obsahovat operátor ~) na cesty, kterým rozumí prohlížeč. (Prohlížeč nerozumí operátoru ~, protože se jedná o operátor používaný výhradně technologií ASP.NET.) Metoda Href slouží pro vytváření cest k prostředkům, jako jsou například soubory s obrázky, jiné webové stránky nebo soubory šablon stylů CSS. Tuto metodu je například možné použít u značek jazyka HTML pro atributy elementů <img>, <link> nebo <a>.

@Code 
    Dim myImagesFolder = "/images" 
    Dim myStyleSheet = "/styles/StyleSheet.css"        
End Code 
 
<!-- Tento kód vytváří cestu "../images/Logo.jpg" v atributu src. --> 
<img src="@Href(myImagesFolder)/Logo.jpg" /> 
 
<!--  Tento kód dosáhne stejného výsledku s použitím cesty obsahující operátor ~ -->   
<img src="@Href("/images")/Logo.jpg" /> 
 
<!--  Vytvoření odkazu na soubor šablon stylů CSS. -->   
<link rel="stylesheet" type="text/css" href="@Href(myStyleSheet)" />

Logika založená na podmíněných výrazech a smyčky

Serverový kód technologie ASP.NET umožňuje provádět úlohy na základě podmínek a vytvářet kód, ve kterém jsou příkazy prováděny opakovaně s určitým počtem opakování – kód je tedy prováděn ve smyčce.

Testování podmínek

Pro testování jednoduchých podmínek slouží příkaz If...Then, který vrací hodnotu True (pravda) nebo False (nepravda) na základě uvedeného testu:

@Code 
    Dim showToday = True 
    If showToday Then 
        DateTime.Today 
    End If 
End Code

Klíčovým slovem If začíná blok. Samotný test (podmínka) následuje po klíčovém slovu If a vrací hodnotu true (pravda) nebo false (nepravda). Příkaz If končí klíčovým slovem Then. Příkazy, které mají být provedeny v případě, že test vrací hodnotu true, jsou ohraničeny klíčovými slovy IfEnd If. Příkaz If může obsahovat blok Else, který určuje příkazy vykonávané v případě, že podmínka není splněna:

@Code 
    Dim showToday = False 
    If showToday Then 
        DateTime.Today 
    Else 
        @<text>Sorry!</text> 
    End If 
End Code

Pokud blok kódu začíná příkazem If, je ho možné uvést i bez použití obvyklých příkazů Code...End Code. Stačí do bloku přidat znak @ a kód bude korektně zpracován. Tento přístup je možné použít u klíčového slova If a také ostatních klíčových slov jazyka Visual Basic, po nichž následují bloky kódu, včetně klíčových slov For, For Each, Do While atd.

@If showToday Then 
    DateTime.Today 
Else 
    @<text>Sorry!</text> 
End If

Další podmínky je možné přidávat pomocí bloku ElseIf:

@Code 
    Dim theBalance = 4.99 
    If theBalance = 0 Then 
        @<p>You have a zero balance.</p> 
    ElseIf theBalance > 0 AndAlso theBalance <= 5 Then 
        ' Pokud je zůstatek větší než 0, ale menší než 
        '  částka 5 USD nebo se jí rovná, je zobrazena tato zpráva. 
        @<p>Your balance of $@theBalance is very low.</p> 
    Else 
        ' V případě zůstatků větších než 5 USD je zobrazen zůstatek. 
        @<p>Your balance is: $@theBalance</p> 
    End If     
End Code

Pokud v tomto příkladu není splněna první podmínka v bloku If, je ověřena podmínka ElseIf. Pokud je tato podmínka splněna, jsou vykonány příkazy v bloku ElseIf. Pokud není splněna žádná z podmínek, jsou vykonány příkazy v bloku Else. Je možné přidávat libovolný počet bloků ElseIf a poté na závěr blok Else jako podmínku pro „všechny ostatní případy“.

Pro testování velkého počtu podmínek slouží blok Select Case:

@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>

Hodnota, která má být testována, se nachází uvnitř závorek (ve výše uvedeném příkladu se jedná o proměnnou weekday). Všechny jednotlivé testy používají příkaz Case, ve kterém je uvedena hodnota. Pokud se hodnota příkazu Case shoduje s testovanou hodnotou, je proveden kód tohoto bloku příkazu Case.

Výsledek posledních dvou podmíněných bloků zobrazený v prohlížeči:

vb-10

Opakovaně prováděný kód

Často je zapotřebí opakovaně provádět stejné příkazy. Toho lze dosáhnout pomocí smyček. Často jsou například prováděny stejné příkazy pro všechny položky kolekce dat. Pokud znáte přesný počet opakování, můžete použít smyčku For. Tento druh smyčky je vhodný zejména pro postupné přičítání nebo odečítání:

@For i = 10 To 20 
    @<p>Item #: @i</p> 
Next i

Smyčka začíná klíčovým slovem For, po kterém následující tři důležité prvky:

Řádek kódu mezi řádky ForNext obsahuje kód, který je vykonán při každém opakování smyčky. Kód značkovacího jazyka vždy vytvoří nový odstavec (element <p>) a přidá do výstupu jeden řádek, na kterém je zobrazena hodnota čítače i. Po spuštění stránky tento příklad vytvoří 11 řádků výstupu a na každém z nich je v textu uvedeno číslo položky.

vb-11

Při práci s kolekcemi nebo poli je často používána smyčka For Each. Kolekce je skupina podobných objektů a smyčka For Each umožňuje provádět určitou operaci se všemi položkami v kolekci. Tento typ smyčky se pro kolekce dobře hodí, protože na rozdíl od smyčky For není třeba zvyšovat hodnotu čítače ani nastavovat omezení. Místo toho kód smyčky For Each jednoduše prochází kolekcí až do jejího konce.

Tento příklad vrací položky kolekce Request.ServerVariables (obsahující informace o webovém serveru). S použitím smyčky For Each zobrazuje název jednotlivých položek tak, že vytváří nový element <li> v seznamu s odrážkami jazyka HTML.

<ul> 
@For Each myItem In Request.ServerVariables 
    @<li>@myItem</li> 
Next myItem 
</ul>

Po klíčových slovech For Each následuje proměnná zastupující jednotlivé položky kolekce (v našem příkladu myItem). Dále následuje klíčové slovoIn a po něm kolekce, kterou má smyčka procházet. V těle smyčky For Each lze k aktuální položce přistupovat pomocí dříve deklarované proměnné.

vb-12

Smyčku, která slouží k obecnějším účelům, je možné vytvořit pomocí příkazu Do While:

@Code 
    Dim countNum = 0 
    Do While countNum < 50 
        countNum += 1 
        @<p>Line #@countNum: </p> 
    Loop 
End Code

Smyčka začíná klíčovým slovem Do While, dále následuje podmínka a po ní blok, který má být opakován. Smyčky obvykle inkrementují proměnné nebo objekty použité pro počítání (přičítají k nim) nebo je dekrementují (odečítají od nich). V tomto příkladu operátor += k proměnné při každém provedení smyčky přičítá hodnotu 1. (Pro dekrementaci proměnné ve smyčce s odpočítáváním by bylo možné použít operátor dekrementace -=.)

Objekty a kolekce

Téměř vše na webu ASP.NET je objektem, včetně samotné webové stránky. V této části jsou popsány některé důležité objekty, se kterými budete ve svém kódu často pracovat.

Objekty stránky

Základním objektem technologie ASP.NET je stránka. K vlastnostem stránky je možné přistupovat přímo, bez určujícího objektu. Následující kód získá cestu k souboru stránky s použitím objektu stránky Request:

@Code 
    Dim path = Request.FilePath 
End Code

Pomocí vlastností objektu Page (Stránka) můžete získat velké množství informací, například:

Kolekce objektů (pole a slovníky)

Kolekce je skupina objektů stejného typu, například kolekce objektů Customer (Zákazník) z databáze. ASP.NET obsahuje mnoho předdefinovaných kolekcí, například kolekci Request.Files.

S daty v kolekcích budete pracovat často. Dvěma běžnými typy kolekcí jsou Array (Pole) a Dictionary (Slovník). Pole je užitečné, pokud chcete uložit kolekci podobných položek, ale nechcete vytvářet samostatné proměnné, které by jednotlivé položky uchovávaly:

<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

Pro pole je deklarován konkrétní typ dat, například String (řetězec), Integer (celé číslo) nebo DateTime (datum a čas). To, že proměnná může obsahovat pole, určíte tak, že při deklaraci k názvu proměnné přidáte závorky (například Dim myVar() As String). K položkám v poli je možné přistupovat pomocí jejich pozice (indexu) nebo pomocí příkazu For Each. Indexy polí jsou počítány od nuly, to znamená, že první položka je na pozici 0, druhá na pozici 1 a tak dále.

@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 pole můžete zjistit pomocí jeho vlastnosti Length (Délka). K získání pozice určité položky v poli (k prohledávání pole) slouží metoda Array.IndexOf. Je možné provádět operace jako například obrácení obsahu pole (metoda Array.Reverse) nebo setřídění jeho obsahu (metoda Array.Sort).

Výstup kódu pracujícího s polem řetězců zobrazený v prohlížeči:

vb-13

Slovník je kolekce párů klíč/hodnota. Při nastavení nebo načtení příslušné hodnoty je nutné poskytnout klíč (neboli název):

@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>

Pro vytvoření slovníku slouží klíčové slovo New, které určuje, že vytváříme nový objekt Dictionary (Slovník). Slovník je možné přiřadit proměnné pomocí klíčového slova Dim. Datový typ položek slovníku je určen s použitím závorek ( ( )). Na konec deklarace je nutné přidat další pár závorek, protože se ve skutečnosti jedná o metodu, která vytváří nový slovník.

Pro přidání položek do slovníku je možné volat metodu Add (Přidat) proměnné slovníku (v tomto případě myScores) a poté zadat klíč a hodnotu. Další možností je použít závorky pro určení klíče a provést prosté přiřazení, jako v následujícím příkladu:

@Code 
    myScores("test4") = 79 
End Code

Pro získání hodnoty ze slovníku je nutné uvést v závorkách klíč:

@myScores("test4")

Volání metod s parametry

Jak jste viděli v předchozí části této kapitoly, objekty, které při programování používáte, mohou mít metody. Objekt Database (Databáze) například může mít metodu Database.Connect (Připojit). Některé metody mohou také mít jeden nebo více parametrů. Parametr je hodnota, kterou funkci předáváte, aby mohla provést svůj úkol. Podívejte se například na deklaraci metody Request.MapPath (Žádost.Mapovat cestu), kterou ve webových stránkách můžete použít při práci s cestami. Metoda Request.MapPath (Žádost.Mapovat cestu) přijímá tři parametry:

Public Overridable Function MapPath (virtualPath As String, _ 
    baseVirtualDir As String, _ 
    allowCrossAppMapping As Boolean)

Tato metoda vrací fyzickou cestu na serveru odpovídající zadané virtuální cestě. Tři parametry této metody jsou virtualPath (virtuální cesta), baseVirtualDir (základní virtuální cesta) a allowCrossAppMapping (povolit mapování napříč aplikacemi). (Všimněte si, že v deklaraci jsou parametry uvedeny spolu s datovými typy dat, která budou přijímat.) Při volání této metody musíte poskytnout hodnoty pro všechny tři parametry.

Při použití jazyka Visual Basic se syntaxí Razor máte dvě možnosti pro předání parametrů metodě: poziční parametry nebo pojmenované parametry. Při volání metody s použitím pozičních parametrů jsou parametry předávány přesně v tom pořadí, v jakém jsou uvedeny v deklaraci metody. (Toto pořadí obvykle zjistíte v dokumentaci metody.) Pořadí parametrů je nutné dodržet a není možné některé parametry vynechat — pro poziční parametr, pro který nemáte hodnotu, můžete v případě potřeby předat prázdný řetězec ("") nebo hodnotu null.

V následujícím příkladu předpokládáme, že na svém webu máte složku s názvem scripts (skripty). Kód volá metodu Request.MapPath (Žádost.Mapovat cestu) a předává hodnoty třech parametrů ve správném pořadí. Poté zobrazí výslednou namapovanou cestu.

@Code 
    ' Předání parametrů metodě s použitím pozičních parametrů 
    Dim myPathPositional = Request.MapPath("/scripts", "/", true) 
End Code 
<p>@myPathPositional</p>

Pokud má metoda mnoho parametrů, můžete zlepšit čitelnost a přehlednost kódu použitím pojmenovaných parametrů. Při volání metody s použitím pojmenovaných parametrů je uveden název parametru, po kterém následují znaky := a poté poskytnutá hodnota. Výhodou pojmenovaných parametrů je, že je lze přidávat v libovolném pořadí. (Nevýhodou je, že volání metody není tak kompaktní.)

Následující příklady volají stejnou metodu jako v předešlém příkladu, ale s použitím pojmenovaných parametrů poskytují hodnoty v pořadí odlišném od pozičních parametrů:

@Code 
    ' Předání parametrů metodě s použitím pojmenovaných parametrů 
    Dim myPathNamed = Request.MapPath(baseVirtualDir:= "/", allowCrossAppMapping:= true, virtualPath:= "/scripts") 
End Code 
<p>@myPathNamed</p>

Jak vidíte, parametry jsou předány v odlišném pořadí. Pokud ale spustíte předchozí a tento příklad, vrátí oba stejnou hodnotu.

Zpracování chyb

Příkazy Try-Catch

Ve vašem kódu se budou často vyskytovat příkazy, u nichž může dojít k chybě z důvodů, které nemůžete ovlivnit. Například:

Z hlediska programování jsou tyto situace nazývány výjimkami. Pokud váš kód narazí na výjimku, vygeneruje (vyvolá) chybovou zprávu, což je pro uživatele přinejmenším nepříjemné.

vb-14

Pokud by váš kód mohl narazit na výjimky a chcete předejít chybovým zprávám tohoto typu, můžete použít příkazy Try/Catch. V příkazu Try je prováděn kód, který je kontrolován. V jednom nebo více příkazech Catch můžete zjišťovat, zda nastaly konkrétní chyby (konkrétní typy výjimek), které se případně mohly vyskytnout. Pro ověření výskytu chyb, které předvídáte, můžete použít tolik příkazů Catch , kolik je zapotřebí.

Poznámka   Doporučujeme nepoužívat metodu Response.Redirect (Žádost.Přesměrovat) v příkazech Try/Catch, protože může na stránce vyvolat výjimku.

Následuje příklad stránky, která při prvním požadavku vytváří textový soubor a poté zobrazí tlačítko umožňující uživateli soubor otevřít. V příkladu je úmyslně použit chybný název souboru, aby způsobil výjimku. Kód obsahuje příkazy Catch pro dvě možné výjimky: FileNotFoundException (Výjimka Soubor nenalezen), která nastane, pokud je použit chybný název souboru, a DirectoryNotFoundException (Výjimka Adresář nenalezen), která nastane, pokud technologie ASP.NET nenachází dokonce ani složku. (Pokud chcete vidět, jak je kód proveden, když vše správně funguje, odstraňte komentář před jedním příkazem v příkladu.)

Pokud by váš kód výjimku nezpracoval, byla by zobrazena chybová stránka podobná té z předchozího snímku obrazovky. Část Try/Catch ale pomáhá uchránit uživatele před zobrazením chyb tohoto typu.

@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 
        ' Když uživatel klikne na tlačítko Open File (Otevřít soubor) a odešle
        ' stránku, zkusíme soubor otevřít. 
        Try 
            ' Tento kód se nezdaří kvůli chybné cestě k souboru. 
            fileContents = File.ReadAllText("c:\batafile.txt") 
             
            ' Tento kód funguje. Pro odstranění chyby na stránce  
            ' označte předchozí řádek kódu jako komentář a zrušte označení komentáře u následujícího řádku.
            ' fileContents = File.ReadAllText(physicalPath) 
             
        Catch ex As FileNotFoundException 
            ' Objekt výjimky je možné použít k ladění, protokolování atd.
            errMsg = ex.Message 
            ' Vytvoření uživatelsky přívětivé chybové zprávy. 
            userErrMsg = "The file could not be opened, please contact " _ 
                & "your system administrator." 
                 
        Catch ex As DirectoryNotFoundException 
            ' Podobně jako u předchozí výjimky
            errMsg = ex.Message 
            userErrMsg = "The file could not be opened, please contact " _ 
                & "your system administrator." 
        End Try 
    Else 
        ' Vytvoření textového souboru při prvním vyžádání stránky, 
        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>

Další materiály

Referenční dokumentace