2 – úvod do programování webů ASP.NET s použitím syntaxe Razor

 
 

 

Tato kapitola přináší přehled programování webových stránek ASP.NET s použitím syntaxe Razor. ASP.NET je technologie společnosti Microsoft pro zobrazování dynamických webových stránek na webových serverech.


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.

Poznámka   Syntaxe Razor je založena na programovacím jazyku C#. Tento jazyk je také použit v celé této knize. Syntaxe Razor ale podporuje i jazyk Visual Basic a vše, co najdete v této knize, je možné provést také v jazyce Visual Basic. Podrobnosti najdete v příloze Jazyk Visual Basic a jeho syntaxe.

Další podrobné informace o většině z těchto programovacích technik najdete v dalších částech této kapitoly.

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:

<!-- Bloky s jedním příkazem  --> 
@{ var total = 7; } 
@{ var myMessage = "Hello World"; } 
 
<!-- 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 --> 
@{ 
    var greeting = "Welcome to our site!"; 
    var weekDay = DateTime.Now.DayOfWeek; 
    var greetingMessage = greeting + " Today is: " + weekDay; 
} 
<p>The greeting is: @greetingMessage</p>

Po spuštění stránky v prohlížeči budou tyto příkazy vypadat následovně:

ch02_programmingintro-1

2. Ohraničení bloků kódu složenými závorkami


Blok kódu obsahuje jeden nebo více příkazů kódu a je ohraničen složenými závorkami.

<!-- Blok s jedním příkazem  --> 
@{ var theMonth = DateTime.Now.Month; } 
<p>The numeric value of the current month: @theMonth</p> 
 
<!-- Blok s více příkazy --> 
@{ 
    var outsideTemp = 79; 
    var weatherMessage = "Hello, it is " + outsideTemp + " degrees."; 
} 
<p>Today's weather: @weatherMessage</p>

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

ch02_programmingintro-2

3. Uvnitř bloku je každý příkaz kódu ukončen středníkem.


Uvnitř bloku kódu musí být každý úplný příkaz ukončen středníkem. Inline výrazy nejsou ukončeny středníkem.


<!-- Blok s jedním příkazem -->
 @{ var theMonth = DateTime.Now.Month; }  

<!-- Blok s více příkazy --> 
@{ 
    var outsideTemp = 79; 
    var weatherMessage = "Hello, it is " + outsideTemp + " degrees."; 
} 
 
<!-- Inline výraz bez středníku --> 
<p>Today's weather: @weatherMessage</p>

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


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


<!-- Uložení řetězce --> 
@{ var welcomeMessage = "Welcome, new members!"; } 
<p>@welcomeMessage</p> 
 

<!-- Uložení data -->
 @{ var year = DateTime.Now.Year; }  

<!-- Zobrazení proměnné --> 
<p>Welcome to our new members who joined in @year!</p>

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

ch02_programmingintro-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:

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

Pokud řetězec obsahuje zpětné lomítko (\) nebo dvojité uvozovky, použijte doslovný řetězcový literál, který je uvozen operátorem @. (V jazyce C# má znak \ zvláštní význam, pokud není použit doslovný řetězcový literál.)


<!-- Vložení zpětného lomítka do řetězce --> 
@{ var myFilePath = @"C:\MyFolder\"; } 
<p>The path is: @myFilePath</p>

Pro vložení dvojitých uvozovek použijte doslovný řetězcový literál a uvozovky zopakujte:


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

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

ch02_programmingintro-4

Poznámka   Znak @ slouží k označení doslovných řetězcových literálů v jazyce C# i k označení kódu ve stránkách ASP.NET.

6. V kódu jsou rozlišována malá a velká písmena.


V jazyce C# jsou rozlišována velká a malá písmena v klíčových slovech (například var,true nebo if) a v názvech proměnných. V následujících řádcích kódu jsou vytvořeny dvě různé proměnné, lastNameLastName.

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

Pokud proměnnou deklarujete jako var lastName = "Smith"; a pak se na ni ve své stránce budete chtít odkázat jako na @LastName, dojde k chybě, protože proměnná LastName nebude rozpoznána.

Poznámka   V jazyce Visual Basic se v klíčových slovech a proměnných velká a malá písmena nerozlišují.

7. Vytváření kódu se z velké části týká objektů.


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á (mimo jiné) 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 jsou 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:

ch02_programmingintro-5

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).

@{ 
   var result = ""; 
   if(IsPost) 
   { 
      result = "This page was posted using the Submit button."; 
   } 
   else 
   { 
      result = "This was the first request for this page."; 
   } 
} 
 
<!DOCTYPE html> 
<html> 
    <head> 
        <title></title> 
    </head> 
<body> 
<form method="POST" action="" > 
  <input type="Submit" name="Submit" value="Submit"/> 
  <p>@result</p> 
</form> 
</body> 
</html> 
    </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 a dalších, 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):

ch02_programmingintro-6

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.cshtml.
  2. Nahraďte veškerý obsah stránky tím, že zkopírujete následující kód a značky.
     
    @{ 
        var total = 0; 
        var totalMessage = ""; 
        if(IsPost) { 
     
            // Načtení čísel zadaných uživatelem 
            var num1 = Request["text1"]; 
            var num2 = Request["text2"]; 
     
            // Převod zadaných řetězců na celá čísla a jejich sečtení 
            total = num1.AsInt() + num2.AsInt(); 
            totalMessage = "Total = " + total; 
        } 
    } 
     
    <!DOCTYPE html> 
    <html lang="en"> 
      <head> 
        <title>Add Numbers</title> 
        <meta charset="utf-8" /> 
        <style type="text/css"> 
          body {background-color: beige; font-family: Verdana, Arial; 
                margin: 50px; } 
          form {padding: 10px; border-style: solid; width: 250px;} 
        </style> 
      </head> 
    <body> 
      <p>Enter two whole numbers and then click <strong>Add</strong>.</p> 
      <form action="" method="post"> 
        <p><label for="text1">First Number:</label> 
          <input type="text" name="text1" /> 
        </p> 
        <p><label for="text2">Second Number:</label> 
          <input type="text" name="text2" /> 
        </p> 
        <p><input type="submit" value="Add" /></p> 
      </form> 
     
      <p>@totalMessage</p> 
     
    </body> 
    </html>

    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).

    ch02_programmingintro-7

Základní principy programování

Jak jste viděli v kapitole 1 – Začínáme se sadou WebMatrix a webovými stránkami ASP.NET a v předchozím příkladu, dokonce i pokud jste nikdy dříve neprogramovali, dokážete pomocí sady WebMatrix, webových stránek ASP.NET a syntaxe Razor rychle vytvořit dynamické stránky s pokročilými funkcemi. Můžete provádět různé operace a stačí vám k tomu jen velmi málo kódu.

Tato kapitola přináší přehled programování webů s použitím technologie ASP.NET. Nejedná se o vyčerpávající rozbor, ale pouze o stručné seznámení s nejčastěji používanými principy programování. Přesto pokrývá téměř vše, co budete potřebovat ve zbývajících částech této knihy.

Nejdříve ale trocha technické průpravy.

Syntaxe Razor, serverový kód a ASP.NET

Syntaxe Razor je jednoduchá syntaxe programování určená pro vkládání kódu prováděného na serveru do webových stránek. Stránka využívající syntaxi Razor obsahuje dva druhy obsahu: klientský obsah a serverový kód. Klientský obsah je to, na co jste ve webových stránkách zvyklí: značky jazyka HTML (elementy), informace o stylech, například šablony stylů CSS, klientské skripty, například JavaScript, a prostý text.

Syntaxe Razor umožňuje přidat do tohoto klientského obsahu serverový kód. Pokud stránka obsahuje serverový kód, server nejprve provede tento kód před odesláním stránky prohlížeči. Díky tomu, že kód je spuštěn na serveru, může provádět úlohy, jejichž provedení pouze s použitím klientského obsahu by bylo mnohem složitější, například přístup k databázím uloženým na serveru. Nejdůležitější ale je, že serverový kód může dynamicky vytvářet klientský obsah — může bezprostředně generovat značky jazyka HTML nebo jiný obsah a odeslat jej prohlížeči spolu se statickým kódem jazyka HTML, který je ve stránce případně obsažen. Mezi klientským obsahem vygenerovaným serverovým kódem a ostatním klientským obsahem není z hlediska prohlížeče žádný rozdíl. Jak jste již viděli, požadovaný serverový kód je velmi jednoduchý.

Webové stránky ASP.NET obsahující syntaxi Razor mají speciální příponu souboru (CSHTML nebo VBHTML). Server tyto přípony rozpozná, provede kód označený syntaxí Razor a poté stránku odešle prohlížeči.

Jak do toho zapadá technologie ASP.NET?

Syntaxe Razor je založena na technologii společnosti Microsoft s názvem ASP.NET, která je sama založena na rozhraní Microsoft .NET Framework. Rozhraní .NET Framework je velký, komplexní programovací rámec od společnosti Microsoft, který je možné použít pro vývoj prakticky libovolného typu počítačových aplikací. ASP.NET je součást rozhraní .NET Framework navržená speciálně pro vytváření webových aplikací. Vývojáři pomocí technologie ASP.NET vytvářejí mnohé z největších a nejfrekventovanějších webů na světě. (Podle toho, že součástí adresy URL webu je přípona souboru ASPX, poznáte, že tento web byl vytvořen pomocí technologie ASP.NET.)

Syntaxe Razor poskytuje plný výkon technologie ASP.NET, ale s použitím zjednodušené syntaxe, kterou se začátečníci mohou snadněji naučit a která zvyšuje produktivitu zkušených vývojářů. I když je tato syntaxe snadno použitelná, díky její příslušnosti do rodiny ASP.NET a .NET Framework máte při nárůstu složitosti vašich webů k dispozici výkon obsáhlejších rozhraní.

ch02_programmingintro-8

Jazyk a syntaxe

V předchozích části jste se seznámili s jednoduchých příkladem toho, jak vytvořit stránku ASP.NET a jak je možné mezi značky jazyka HTML přidat serverový kód. Zde si osvojíte základy 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. Bude vám nejspíš stačit seznámit se jen s tím, jak je serverový kód přidáván do kódu značkovacího jazyka v souborech CSHTML.

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, kód značkovacího jazyka nebo obojí. 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:

@{ var lastName =    "Smith"; }

Přechod na nový řádek v rámci příkazu nemá na příkaz žádný vliv a příkazy je proto možné pro zlepšení jejich čitelnosti zalamovat. Následující dva příkazy jsou shodné:

@{ var theName = 
"Smith"; } 
 
@{ 
    var 
    personName 
    = 
    "Smith" 
    ; 
} 

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

@{ var test = "This is a long 
    string"; }  // To nefunguje!

Existují dvě možnosti, jak sloučit dlouhé řetězce, které pokračují na více řádcích jako ve výše uvedeném příkladu. Je možné použít operátor zřetězení (+), se kterým se setkáte v další části této kapitoly. Je také možné vytvořit doslovný řetězcový literál pomocí znaku @, jak jste již viděli v předchozí části této kapitoly. Doslovné řetězcové literály je možné zalomit na více řádků:

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

Komentáře programového kódu (a kódu značkovacího jazyka)

Pomocí komentářů můžete zanechávat poznámky sami pro sebe či pro své kolegy. Umožňují také zakázat (označit jako komentář) část programového kódu nebo kódu značkovacího jazyka, který nemá být spuštěn, ale který chcete prozatím ve stránce ponechat.

Syntaxe komentářů v programovém kódu syntaxe Razor se liší od syntaxe komentářů v kódu značkovacího jazyka HTML. Stejně jako veškerý kód syntaxe Razor jsou komentáře v kódu syntaxe Razor zpracovány (a poté odstraněny) na serveru před odesláním stránky prohlížeči. Syntaxe komentářů kódu Razor proto umožňuje vložit do programového kódu (nebo dokonce i do kódu značkovacího jazyka) komentáře, které jsou viditelné při provádění úprav souboru, ale které uživatel nevidí, a to ani ve zdrojovém kódu stránky.

Komentáře stránek ASP.NET se syntaxí Razor jsou uvozeny znaky @* a končí znaky *@. Komentář může být uveden na jednom nebo více řádcích.

@*  Komentář kódu na jednom řádku *@ 
 
@* 
    Toto je  komentář rozdělený na více řádků.
    Může pokračovat na libovolném počtu řádků. 
*@      

Toto je komentář uvnitř bloku kódu:

@{ 
    @* Toto je komentář. *@ 
    var theVar = 17; 
} 

Následuje stejný blok kódu, ve kterém byl řádek kódu označen jako komentář, a proto nebude proveden:

@{ 
    @* Toto je komentář. *@ 
    @* var theVar = 17;  *@ 
} 

Kromě syntaxe komentářů kódu Razor je uvnitř bloku kódu možné použít syntaxi komentářů příslušného programovacího jazyka, například C#:

@{ 
    
// Toto je komentář.
     var myVar = 17; 
    /* Toto je víceřádkový komentář, 
který používá syntaxi komentářů jazyka C#. */ 
}

V jazyce C# jsou komentáře nepřesahující jeden řádek uvozeny znaky // a komentáře rozdělené na více řádku začínají znaky /* a končí znaky */. (Stejně jako komentáře syntaxe Razor nejsou komentáře jazyka C# předány prohlížeči.)

Jak již nejspíš víte, v kódu značkovacího jazyka je možné vytvořit komentáře jazyka HTML:

<!-- Toto je komentář.  -->

Komentáře jazyka HTML začínají znaky <!-- a končí znaky -->. Pomocí komentářů jazyka HTML můžete uzavřít nejen text, ale také libovolný jiný kód značkovacího jazyka HTML, který chcete ponechat ve stránce, ale který nemá být vykreslen. Tento komentář jazyka HTML skryje veškerý obsah značek a v nich obsažený text:

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

Na rozdíl od komentářů syntaxe Razor jsou komentáře jazyka HTML odeslány v rámci stránky a uživatel je uvidí, pokud si zobrazí zdrojový kód stránky.

Proměnné

Proměnná je pojmenovaný objekt, který slouží k ukládání dat. Proměnné mohou mít libovolný název, musí ale začínat abecedním znakem a nesmí obsahovat mezery ani vyhrazené znaky.

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ů.

Obecně ale není nutné typ proměnné určovat. Ve většině případů technologie ASP.NET 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.)

Proměnné se deklarují pomocí klíčového slova var (pokud nechcete určit typ) nebo pomocí názvu typu:

@{ 
    // Přiřazení řetězce proměnné 
    var greeting = "Welcome!"; 
 
    // Přiřazení čísla proměnné 
    var theCount = 3; 
 
    // Přiřazení výrazu proměnné 
    var monthlyTotal = theCount + 5; 
 
    // Přiřazení data proměnné 
    var today = DateTime.Today; 
 
    // Přiřazení aktuální adresy URL stránky proměnné 
    var myPath = this.Request.Url; 
 
    // Deklarace proměnných s použitím explicitních datových typů 
    string name = "Joe"; 
    int count = 5; 
    DateTime tomorrow = DateTime.Now.AddDays(1); 
}

Následující příklad ukazuje, jak jsou proměnné ve webové stránce běžně používány:

@{ 
    // Vložení hodnoty proměnné mezi značky jazyka HTML 
    <p>@greeting, friends!</p> 
 
    // Použití proměnných v rámci inline výrazů 
    <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:

ch02_programmingintro-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.

@{ 
    var total = 0; 
 
    if(IsPost) { 
        // Načtení čísel zadaných uživatelem 
        var num1 = Request["text1"]; 
        var num2 = Request["text2"]; 
        // Převod zadaných řetězců na celá čísla a jejich sečtení 
        total = num1.AsInt() + num2.AsInt(); 
    } 
}

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 čí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.
var myIntNumber = 0; 
var myStringNum = "539"; 
if(myStringNum.IsInt()==true){ 
    myIntNumber = myStringNum.AsInt(); 
}
AsBool(),
IsBool()
Převádí řetězec, například "true" nebo "false", na hodnotu typu Boolean.
var myStringBool = "True"; 
var 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.
var myStringFloat = "41.432895"; 
var 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.)
var myStringDec = "10317.425"; 
var myDecNum = myStringDec.AsDecimal(); 
AsDateTime(),
IsDateTime()
Převádí řetězec představující datum a čas na typ DateTime (Datum a čas) technologie ASP.NET.
var myDateString = "12/27/2010"; 
var newDate = myDateString.AsDateTime();                
ToString() Převádí libovolný jiný datový typ na řetězec.
int num1 = 17; 
int num2 = 76; 

// nastavení proměnné myString na hodnotu 1776 
string myString = num1.ToString() + 
  num2.ToString();

Operátory

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 C# (a na něm založená syntaxe Razor) podporuje mnoho operátorů, ale do začátku vám bude stačit 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) 
@{ var netWorth = 150000; } 
@{ var newTotal = netWorth * 2; } 
@(newTotal / 2)
= Přiřazení. Přiřazuje hodnotu na pravé straně příkazu objektu na straně levé.
var age = 17;
== Rovnost. Vrací hodnotu true (pravda), pokud jsou si hodnoty rovny. (Všimněte si rozdílu mezi operátorem = a operátorem ==.)
var myNum = 15; 
if (myNum == 15) { 
    // Něco provedeme. 
} 
!= Nerovnost. Vrací hodnotu true (pravda), pokud si hodnoty nejsou rovny.
var theNum = 13; 
if (theNum != 15) { 
    // Něco provedeme. 
}
<
>
<=
>=
Menší než,
větší než,
menší než nebo rovno
a větší než nebo rovno.
if (2 < 3) { 
    // Něco provedeme. 
} 
var currentCount = 12; 
if(currentCount >= 12) { 
    // Něco provedeme. 
}
+ Zřetězení. Slouží ke spojování řetězců. ASP.NET pozná rozdíl mezi tímto operátorem a operátorem součtu na základě datového typu výrazu.

// 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.
int theCount = 0; 
theCount += 1; // Přičte 1 k proměnné count
. Tečka. Slouží pro rozlišení objektů a jejich vlastností nebo metod.
var myUrl = Request.Url; 
var count = Request["Count"].AsInt();
() Závorky. Slouží k seskupování výrazů a k předávání parametrů metodám.
@(3 + 7) 
@Request.MapPath(Request.FilePath);
[] Hranaté závorky. Slouží pro přístup k hodnotám polí nebo kolekcí.
var income = Request["AnnualIncome"];
! 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).
bool taskCompleted = false; 
// Probíhá zpracování. 
if(!taskCompleted) { 
    // Pokračovat ve zpracování 
}
&&

||

Logické operátory A a NEBO, které slouží ke spojování podmínek.
bool myTaskCompleted = false; 
int totalCount = 0; 
// Probíhá zpracování. 
if(!myTaskCompleted && totalCount < 12) { 
    // Pokračovat ve zpracování 
}

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 v 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 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 Styles.css z výše zobrazené struktury:

Při práci se soubory a složkami v kódu je někdy nutné se odkazovat 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.

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

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:

@{ 
    var dataFilePath = "/dataFile.txt"; 
} 
<!-- 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>.

@{ 
    var myImagesFolder = "/images"; 
    var myStyleSheet = "/styles/StyleSheet.css"; 
} 
 
<!-- Tento kód vytváří cestu "../images/Logo.jpg" 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í (tedy kód, který je vykonáván ve smyčce).

Testování podmínek

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

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

Klíčovým slovem if začíná blok. Vlastní test (podmínka) se nachází uvnitř závorek a vrací hodnotu true (pravda) nebo false (nepravda). Příkazy, které jsou vykonány v případě, že test vrátí hodnotu true, jsou uzavřeny ve složených závorkách. Příkaz if může obsahovat blok else, který určuje příkazy vykonávané v případě, že podmínka není splněna:

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

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

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

Pokud v tomto příkladu není splněna první podmínka v bloku if, je ověřena podmínka else if. Pokud je tato podmínka splněna, jsou vykonány příkazy v bloku else if. 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ů else if 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 switch:

@{ 
    var weekday = "Wednesday"; 
    var greeting = ""; 
 
    switch(weekday) 
    { 
        case "Monday": 
            greeting = "Ok, it's a marvelous Monday"; 
            break; 
        case "Tuesday": 
            greeting = "It's a tremendous Tuesday"; 
            break; 
        case "Wednesday": 
            greeting = "Wild Wednesday is here!"; 
            break; 
        default: 
            greeting = "It's some other day, oh well."; 
            break; 
    } 
 
    <p>Since it is @weekday, the message for today is: @greeting</p> 
}

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 ukončený dvojtečkou (:). Pokud se hodnota příkazu case shoduje s testovanou hodnotou, je proveden kód tohoto bloku příkazu case. Každý příkaz case je ukončen příkazem break. (Pokud zapomenete uvést příkaz break ve všech blocích příkazů case, bude proveden také kód z následujícího příkazu case.) Blok switch často obsahuje příkaz default, který odpovídá příkazu case pro „všechny ostatní možnosti“ a je proveden v případě, že žádný jiný příkaz case nenabývá hodnotu true.

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

ch02_programmingintro-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(var i = 10; i < 21; i++) 
{ 
    <p>Line #: @i</p> 
}

Smyčka začíná klíčovým slovem for, po kterém následují tři příkazy uvnitř závorek, každý ukončený středníkem.

Uvnitř složených závorek se nachází kód, který bude proveden v každé iteraci 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.

ch02_programmingintro-11

Při práci s poli nebo kolekcemi je často používána smyčka foreach. Kolekce je skupina podobných objektů a smyčka foreach 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 foreach jednoduše prochází kolekcí až do jejího konce.

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

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

Po klíčovém slovu foreach následují závorky, ve kterých je deklarována proměnná zastupující jednotlivé položky kolekce (v tomto příkladu var item). Dále následuje klíčové slovo in a po něm kolekce, kterou má smyčka procházet. V těle smyčky foreach lze k aktuální položce přistupovat pomocí dříve deklarované proměnné.

ch02_programmingintro-12

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

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

Smyčka while začíná klíčovým slovem while, po kterém následují závorky, v nichž je uvedeno, jak dlouho má smyčka pokračovat (v tomto případě, dokud je hodnota proměnné countNum menší než 50). Pak následuje blok, který má být opakován. Smyčky obvykle inkrementují proměnné nebo objekty použité pro přičítání (přičítají k nim) nebo je dekrementují (odečítají od nich). V tomto příkladu operátor += k proměnné countNum 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:

@{ 
    var path = Request.FilePath; 
}

Aby bylo zřejmé, že se odkazujete na vlastnosti a metody aktuálního objektu stránky, můžete volitelně použít klíčové slovo this, které v kódu představuje objekt stránky. Zde je předchozí příklad kódu, do něhož bylo přidáno klíčové slovo this představující stránku:

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

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:

@* Blok s polem 1: Deklarace pole pomocí hranatých závorek *@ 
@{ 
    <h3>Team Members</h3> 
    string[] teamMembers = {"Matt", "Joanne", "Robert", "Nancy"}; 
    foreach (var person in teamMembers) 
    { 
        <p>@person</p> 
    } 
}

Pro pole je deklarován konkrétní typ dat, například string (řetězec), int (celé číslo) nebo DateTime (datum a čas). To, že proměnná může obsahovat pole, určíte tak, že do deklarace přidáte hranaté závorky (například string[] nebo int[]). K položkám v poli je možné přistupovat pomocí jejich pozice (indexu) nebo pomocí příkazu foreach. 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.

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

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:

ch02_programmingintro-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):

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

Pro vytvoření slovníku slouží klíčové slovo new, které určuje, že vytváříme nový objekt slovníku. Slovník je možné přiřadit proměnné pomocí klíčového slova var. Datový typ položek slovníku je určen pomocí ostrých závorek (< >). Na konec deklarace je nutné přidat 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 hranaté závorky pro určení klíče a provést prosté přiřazení, jako v následujícím příkladu:

myScores["test4"] = 79;

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

var testScoreThree = myScores["test3"];

Volání metod s parametry

Jak jste se dočetli 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). Řada metod také může 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), která přijímá tři parametry:

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

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.

Syntaxe Razor nabízí dvě možnosti předávání parametrů metodě: poziční parametrypojmenované 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.


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

Pokud má metoda mnoho parametrů, můžete zlepšit čitelnost 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ásleduje dvojtečka (:) a poté hodnota. Výhodou pojmenovaných parametrů je, že je lze předávat v libovolném pořadí. (Nevýhodou je, že volání metody není tak kompaktní.)

V následujícím příkladu je volána stejná metoda jako výše, ale hodnoty jsou poskytnuty s použitím pojmenovaných parametrů:


// Předání parametrů metodě s použitím pojmenovaných parametrů 
var myPathNamed = Request.MapPath(baseVirtualDir: "/", allowCrossAppMapping: true, virtualPath: "/scripts"); 
<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é:

ch02_programmingintro-14

Pokud váš kód může narazit na výjimky a pokud 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 v příkazech try/catch metodu Response.Redirect (Žádost.Přesměrovat), 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.

@{ 
    var dataFilePath = "/dataFile.txt"; 
    var fileContents = ""; 
    var physicalPath = Server.MapPath(dataFilePath); 
    var userMessage = "Hello world, the time is " + DateTime.Now; 
    var userErrMsg = ""; 
    var errMsg = ""; 
 
    if(IsPost) 
    { 
        // Když uživatel klikne na tlačítko Open File a odešle 
        // stránku, zkusíme otevřít pro čtení vytvořený soubor. 
        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 (FileNotFoundException ex) { 
            // 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 = "A file could not be opened, please contact " 
                + "your system administrator."; 
        } 
        catch (DirectoryNotFoundException ex) { 
            // Podobně jako u předchozí výjimky 
            errMsg = ex.Message; 
            userErrMsg = "A directory was not found, please contact " 
                + "your system administrator."; 
        } 
    } 
    else 
    { 
        // Vytvoření textového souboru při prvním vyžádání stránky 
        File.WriteAllText(physicalPath, userMessage); 
    } 
} 
 
<!DOCTYPE html> 
<html lang="en"> 
    <head> 
        <meta charset="utf-8" /> 
        <title>Try-Catch Statements</title> 
    </head> 
    <body> 
    <form method="POST" action="" > 
      <input type="Submit" name="Submit" value="Open File"/> 
    </form> 
 
    <p>@fileContents</p> 
    <p>@userErrMsg</p> 
 
    </body> 
</html>

Další materiály

Programování v jazyce Visual Basic

Příloha: Jazyk Visual Basic a jeho syntaxe

Referenční dokumentace

ASP.NET

Jazyk C#