Úvod do ASP.NET webového programování pomocí syntaxe Razor (C#)

, autor: Tom FitzMacken

Tento článek obsahuje přehled programování s webovými stránkami ASP.NET pomocí syntaxe Razor. ASP.NET je technologie společnosti Microsoft pro provozování dynamických webových stránek na webových serverech. Tento článek se zaměřuje na používání programovacího jazyka C#.

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.

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.

Poznámka

Syntaxe Razor je založená na programovacím jazyce C#, což je jazyk, který se s ASP.NET webovými stránkami používá nejčastěji. Syntaxe Razor však podporuje také jazyk Visual Basic a vše, co vidíte, můžete také dělat v jazyce Visual Basic. Podrobnosti najdete v příloze Jazyk a syntaxe jazyka Visual Basic.

Další podrobnosti o většině těchto programovacích technik najdete dále v tomto článku.

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  -->
@{ var total = 7; }
@{ var myMessage = "Hello World"; }

<!-- Inline expressions -->
<p>The value of your account is: @total </p>
<p>The value of myMessage is: @myMessage</p>

<!-- Multi-statement block -->
@{
    var greeting = "Welcome to our site!";
    var weekDay = DateTime.Now.DayOfWeek;
    var greetingMessage = greeting + " Today is: " + weekDay;
}
<p>The greeting is: @greetingMessage</p>

Takto vypadají tyto příkazy, když stránka běží v prohlížeči:

Razor-Img1

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 si můžete přečíst v tématu Práce s formuláři.

2. Bloky kódu uzavřete do složených závorek.

Blok kódu obsahuje jeden nebo více příkazů kódu a je uzavřený ve složených závorkách.

<!-- Single statement block.  -->
@{ var theMonth = DateTime.Now.Month; }
<p>The numeric value of the current month: @theMonth</p>

<!-- Multi-statement block. -->
@{
    var outsideTemp = 79;
    var weatherMessage = "Hello, it is " + outsideTemp + " degrees.";
}
<p>Today's weather: @weatherMessage</p>

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

Razor-Img2

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

Uvnitř bloku kódu musí každý úplný příkaz kódu končit středníkem. Vložené výrazy nekončí středníkem.

<!-- Single-statement block -->
@{ var theMonth = DateTime.Now.Month; }

<!-- Multi-statement block -->
@{
    var outsideTemp = 79;
    var weatherMessage = "Hello, it is " + outsideTemp + " degrees.";
}

<!-- Inline expression, so no semicolon -->
<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 var slova . Hodnoty proměnných můžete vložit přímo na stránku pomocí příkazu @.

<!-- Storing a string -->
@{ var welcomeMessage = "Welcome, new members!"; }
<p>@welcomeMessage</p>

<!-- Storing a date -->
@{ var year = DateTime.Now.Year; }

<!-- Displaying a variable -->
<p>Welcome to our new members who joined in @year!</p>

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

Razor-Img3

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:

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

Pokud řetězec, který chcete zobrazit, obsahuje znak zpětného lomítka ( \ ) nebo uvozovky ( " ), použijte doslovný řetězcový literál s předponou operátoru @ . (V jazyce C# má znak \ zvláštní význam, pokud nepoužijete doslovný řetězcový literál.)

<!-- Embedding a backslash in a string -->
@{ var myFilePath = @"C:\MyFolder\"; }
<p>The path is: @myFilePath</p>

Pokud chcete vložit dvojité uvozovky, použijte doslovný řetězcový literál a uvozovky opakujte:

<!-- Embedding double quotation marks in a string -->
@{ var myQuote = @"The person said: ""Hello, today is Monday."""; }
<p>@myQuote</p>

Tady je výsledek použití obou těchto příkladů na stránce:

Razor-Img4

Poznámka

Všimněte si, že @ znak se používá k označení doslovných řetězcových literálů v jazyce C# i k označení kódu na ASP.NET stránkách.

6. Kód rozlišuje malá a velká písmena.

V jazyce C# klíčová slova (například var, truea if) a názvy proměnných rozlišují malá a velká písmena. Následující řádky kódu vytvoří dvě různé proměnné lastName a LastName.

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

Pokud deklarujete proměnnou jako var lastName = "Smith"; a pokusíte se na tuto proměnnou na stránce odkazovat jako @LastName, získali byste hodnotu "Jones" místo "Smith".

Poznámka

V jazyce Visual Basic klíčová slova a proměnné nerozlišují malá a velká písmena.

7. Velká část kódování zahrnuje 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 a které můžete číst nebo měnit – objekt textového pole má Text vlastnost (mimo jiné), objekt požadavku má Url vlastnost, e-mailová zpráva má From vlastnost a objekt zákazníka vlastnostFirstName. 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 textových polí (polí formuláře) na stránce, typ prohlížeče, který vytvořil požadavek, adresa URL stránky, identita uživatele atd. Následující 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:

Razor-Img5

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

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

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

Razor-Img6

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 tlačítko 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.

  1. V editoru vytvořte nový soubor a pojmenujte ho AddNumbers.cshtml.

  2. Zkopírujte na stránku následující kód a kód a nahraďte všechno, co už na stránce je.

    @{
        var total = 0;
        var totalMessage = "";
        if(IsPost) {
    
            // Retrieve the numbers that the user entered.
            var num1 = Request["text1"];
            var num2 = Request["text2"];
    
            // Convert the entered strings into integers numbers and add.
            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>
    

    Tady je pár věcí, které byste si měli poznamenat:

    • Znak @ začíná prvním blokem kódu na stránce a předchází totalMessage proměnné, která je vložená v dolní části stránky.
    • Blok v horní části stránky je uzavřený ve složených závorkách.
    • V bloku nahoře končí všechny čáry středníkem.
    • Proměnné total, , num1num2a totalMessage 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 rozlišuje velká a malá písmena, totalMessage musí se při použití proměnné v dolní části stránky její název přesně shodovat s proměnnou nahoře.
    • Výraz num1.AsInt() + num2.AsInt() ukazuje, jak pracovat s objekty a metodami. Metoda AsInt pro každou proměnnou převede řetězec zadaný uživatelem na číslo (celé číslo), abyste s ním mohli provádět aritmetické operace.
    • Značka <form> obsahuje method="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í if(IsPost) stránky se test vyhodnotí jako true a spustí se podmíněný kód, který zobrazí výsledek sčítání čísel.
  3. Uložte stránku a spusťte ji v prohlížeči. (Než stránku spustíte, ujistěte se, že je v pracovním prostoru Soubory vybraná.) Zadejte dvě celá čísla a klikněte na tlačítko Přidat .

    Razor-Img7

Základní koncepty programování

Tento článek poskytuje přehled ASP.NET webového programování. Nejedná se o vyčerpávající zkoumání, jen o rychlý přehled programovacích konceptů, které budete používat nejčastěji. I tak se věnuje téměř všemu, co budete potřebovat k tomu, abyste mohli začít s ASP.NET webovými stránkami.

Ale nejdřív trochu technického zázemí.

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

Syntaxe Razor je jednoduchá programovací syntaxe pro vkládání serverového kódu na webovou stránku. Na webové stránce, která používá syntaxi Razor, existují dva druhy obsahu: obsah klienta a serverový kód. Obsah klienta je obsah, na který jste zvyklí na webových stránkách: značky HTML (elementy), informace o stylu, jako je CSS, možná nějaký klientský skript, jako je JavaScript, a prostý text.

Syntaxe Razor umožňuje přidat kód serveru k tomuto obsahu klienta. Pokud je na stránce kód serveru, server tento kód nejprve spustí, než stránku odešle do prohlížeče. Spuštěním na serveru může kód provádět úlohy, které mohou být mnohem složitější s využitím samotného obsahu klienta, jako je přístup k serverovým databázím. Nejdůležitější je, že serverový kód může dynamicky vytvářet klientský obsah – může za chodu generovat značky HTML nebo jiný obsah a pak ho odeslat do prohlížeče spolu se statickým kódem HTML, který může stránka obsahovat. Z pohledu prohlížeče se obsah klienta vygenerovaný kódem serveru nijak neliší od jakéhokoli jiného obsahu klienta. Jak jste už viděli, požadovaný kód serveru je poměrně jednoduchý.

ASP.NET webové stránky, které obsahují syntaxi Razor, mají speciální příponu souboru (.cshtml nebo .vbhtml). Server tato rozšíření rozpozná, spustí kód označený syntaxí Razor a pak odešle stránku do prohlížeče.

Kam se ASP.NET vejde?

Syntaxe Razor je založena na technologii od Microsoftu s názvem ASP.NET, která je zase založená na rozhraní Microsoft .NET Framework. The.NET Framework je velká a komplexní programovací architektura od Microsoftu pro vývoj prakticky jakéhokoli typu počítačové aplikace. ASP.NET je část rozhraní .NET Framework, která je speciálně navržená pro vytváření webových aplikací. Vývojáři používají ASP.NET k vytvoření mnoha největších a nejužších webů na světě. (Kdykoli se v rámci adresy URL na webu zobrazí přípona názvu souboru .aspx , budete vědět, že web byl napsaný pomocí ASP.NET.)

Syntaxe Razor nabízí všechny možnosti ASP.NET, ale používá zjednodušenou syntaxi, která se snadněji naučí, pokud jste začátečník, a která vám umožní zvýšit produktivitu, pokud jste odborník. I když je tato syntaxe jednoduchá, její rodinný vztah k ASP.NET a rozhraní .NET Framework znamená, že s tím, jak jsou vaše weby sofistikovanější, máte k dispozici sílu větších architektur, které máte k dispozici.

Razor-Img8

Tip

Třídy a instance

ASP.NET kód serveru používá objekty, které jsou zase založené na myšlence tříd. Třída je definice nebo šablona objektu. Aplikace může například obsahovat Customer třídu, která definuje vlastnosti a metody, které každý objekt zákazníka potřebuje.

Když aplikace potřebuje pracovat se skutečnými informacemi o zákaznících, vytvoří instanci (neboli vytvoří) objekt zákazníka. Každý jednotlivý zákazník je samostatnou instancí Customer třídy. Každá instance podporuje stejné vlastnosti a metody, ale hodnoty vlastností pro každou instanci jsou obvykle odlišné, protože každý objekt zákazníka je jedinečný. V jednom objektu LastName zákazníka může být vlastnost "Smith"; v jiném objektu LastName zákazníka může být vlastnost "Jones".

Podobně každá jednotlivá webová stránka na webu je Page objektem, který je instancí Page třídy. Tlačítko na stránce je Button objekt, který je instancí Button třídy atd. Každá instance má své vlastní charakteristiky, ale všechny jsou založené na tom, co je zadáno v definici třídy objektu.

Základní syntaxe

Dříve jste viděli základní příklad vytvoření stránky ASP.NET webových stránek a přidání kódu serveru do značek HTML. Tady se seznámíte se základy psaní kódu ASP.NET serveru pomocí syntaxe Razor , tj. pravidel programovacího jazyka.

Pokud máte zkušenosti s programováním (zejména pokud jste používali jazyk C, C++, C#, Visual Basic nebo JavaScript), většina z toho, co tady čtete, bude znát. Pravděpodobně se budete muset seznámit pouze s tím, jak se kód serveru přidává do značek v souborech .cshtml .

Kombinování textu, značek a kódu v blocích kódu

V blocích kódu serveru často chcete na stránku vytvořit výstup textu nebo značek (nebo obojí). Pokud blok kódu serveru obsahuje text, který není kódem a který by měl být vykreslován tak, jak je, ASP.NET musí být schopen tento text od kódu odlišit. Existuje několik způsobů, jak to udělat.

  • Uzavřete text do elementu HTML, například <p></p> nebo <em></em>:

    @if(IsPost) {
        // 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: <br /> </p>  @DateTime.Now
    }
    

    Element HTML může obsahovat text, další prvky HTML a výrazy kódu serveru. Když ASP.NET uvidíte počáteční značku HTML (například <p>), vykreslí vše, včetně elementu a jeho obsahu, jak je, do prohlížeče a přeloží výrazy kódu serveru tak, jak je.

  • @: 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ře více řádků k výstupu. Tyto možnosti jsou užitečné, pokud nechcete vykreslit element HTML jako součást výstupu.

    @if(IsPost) {
        // Plain text followed by an unmatched HTML tag and server code.
        @: The time is: <br /> @DateTime.Now
        <br/>
        // Server code and then plain text, matched tags, and more text.
        @DateTime.Now @:is the <em>current</em> time.
    }
    

    Pokud chcete zobrazit výstup více řádků textu nebo nespárovaných značek HTML, můžete před každým řádkem @:použít znak , nebo můžete řádek uzavřít do elementu <text> . @: Stejně jako operátor<text> se značky používají ASP.NET k identifikaci textového obsahu a ve výstupu stránky se nikdy nevykreslí.

    @if(IsPost) {
        // Repeat the previous example, but use <text> tags.
        <text>
        The time is: <br /> @DateTime.Now
        <br/>
        @DateTime.Now is the <em>current</em> time.
        </text>
    }
    
    @{
        var minTemp = 75;
        <text>It is the month of @DateTime.Now.ToString("MMMM"), and
        it's a <em>great</em> day! <br /><p>You can go swimming if it's at
        least @minTemp degrees. </p></text>
    }
    

    První příklad opakuje předchozí příklad, ale používá jednu dvojici značek <text> k uzavření textu, který se má vykreslit. Ve druhém příkladu <text> značky a </text> ohraničí tři řádky, z nichž všechny obsahují nějaký text a chybějící značky HTML (<br />), spolu se serverovým kódem a odpovídajícími značkami HTML. Opět můžete před každým řádkem předcházet zvlášť operátorem @: . V obou těchto krocích to funguje.

    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 html nezakóduje. (Jak bylo uvedeno výše, ASP.NET kóduje výstup výrazů kódu serveru 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í vliv na příkaz:

@{ var lastName =    "Smith"; }

Konec řádku v příkazu nemá žádný vliv na příkaz a příkazy můžete zabalit, aby byly čitelné. Následující příkazy jsou stejné:

@{ var theName =
"Smith"; }

@{
    var
    personName
    =
    "Smith"
    ;
}

Nemůžete ale zabalit řádek uprostřed řetězcového literálu. Následující příklad nefunguje:

@{ var test = "This is a long
    string"; }  // Does not work!

Pokud chcete zkombinovat dlouhý řetězec, který se zalamuje do více řádků, jako je výše uvedený kód, existují dvě možnosti. Můžete použít operátor zřetězení (+), který uvidíte dále v tomto článku. Pomocí znaku @ můžete také vytvořit doslovný řetězcový literál, jak jste viděli dříve v tomto článku. Doslovné řetězcové literály můžete rozdělit mezi řádky:

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

Komentáře ke kódu (a značek)

Komentáře umožňují zanechat poznámky pro sebe nebo pro ostatní. Umožňují také zakázat (zakomentovat) oddíl kódu nebo značek, které nechcete spustit, ale chcete na stránce prozatím zachovat.

Existuje různá syntaxe komentářů pro kód Razor a pro značky HTML. Stejně jako u všech kódů Razor se komentáře Razor zpracují (a pak odeberou) na serveru před odesláním stránky do prohlížeče. Syntaxe komentářů Razor proto umožňuje vložit komentáře do kódu (nebo dokonce do kódu), které můžete při úpravě souboru vidět, ale které uživatelé nevidí, a to ani ve zdroji stránky.

U ASP.NET komentářů Razor začnete komentářem @* a ukončíte ho na *@. Komentář může být na jednom řádku nebo na více řádcích:

@*  A one-line code comment. *@

@*
    This is a multiline code comment.
    It can continue for any number of lines.
*@

Tady je komentář v rámci bloku kódu:

@{
    @* This is a comment. *@
    var theVar = 17;
}

Tady je stejný blok kódu s řádkem kódu, který je zakomentovaný, aby se nespustí:

@{
    @* This is a comment. *@
    @* var theVar = 17;  *@
}

V bloku kódu můžete jako alternativu k použití syntaxe komentáře Razor použít syntaxi komentování programovacího jazyka, který používáte, například C#:

@{
    // This is a comment.
    var myVar = 17;
    /* This is a multi-line comment
    that uses C# commenting syntax. */
}

V jazyce C# předcházejí jednořádkové // komentáře znaky a víceřádkové komentáře začínají /* na a končí na */. (Stejně jako u komentářů Razor se komentáře jazyka C# nevykreslí do prohlížeče.)

Pro revize, jak asi víte, můžete vytvořit komentář HTML:

<!-- This is a comment.  -->

Komentáře HTML začínají <!-- znaky a končí na -->. Komentáře HTML můžete použít k ohraničení nejen textu, ale také všech značek HTML, které chcete na stránce zachovat, ale nechcete je vykreslit. Tento komentář HTML skryje celý obsah značek a text, který obsahují:

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

Na rozdíl od komentářů Razor se komentáře HTML vykreslují na stránku a uživatel je může zobrazit zobrazením zdroje stránky.

Razor má omezení pro vnořené bloky jazyka C#. Další informace najdete v tématu Pojmenované proměnné jazyka C# a vnořené bloky generují poškozený kód.

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.

Proměnné a datové typy

Proměnná může mít konkrétní datový typ, který označ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.

Obecně ale nemusíte zadávat typ proměnné. Většinou ASP.NET dokáže zjistit typ na základě toho, jak se data v proměnné používají. (Občas je nutné zadat typ. Zobrazí se příklady, kde je tato hodnota pravdivá.)

Proměnnou deklarujete pomocí klíčového var slova (pokud nechcete zadat typ) nebo pomocí názvu typu:

@{
    // Assigning a string to a variable.
    var greeting = "Welcome!";

    // Assigning a number to a variable.
    var theCount = 3;

    // Assigning an expression to a variable.
    var monthlyTotal = theCount + 5;

    // Assigning a date value to a variable.
    var today = DateTime.Today;

    // Assigning the current page's URL to a variable.
    var myPath = this.Request.Url;

    // Declaring variables using explicit data types.
    string name = "Joe";
    int count = 5;
    DateTime tomorrow = DateTime.Now.AddDays(1);
}

Následující příklad ukazuje některá typická použití proměnných na webové stránce:

@{
    // Embedding the value of a variable into HTML markup.
    <p>@greeting, friends!</p>

    // Using variables as part of an inline expression.
    <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>
}

Pokud zkombinujete předchozí příklady na stránce, zobrazí se to v prohlížeči:

Razor-Img9

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

I když ASP.NET obvykle dokáže určit datový typ automaticky, někdy to nejde. Proto můžete potřebovat pomoct ASP.NET provedením explicitního převodu. I když nemusíte převádět typy, někdy je užitečné otestovat, s jakým typem dat můžete pracovat.

Nejběžnějším případem je, že musíte 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.

@{
    var total = 0;

    if(IsPost) {
        // Retrieve the numbers that the user entered.
        var num1 = Request["text1"];
        var num2 = Request["text2"];
        // Convert the entered strings into integers numbers and add.
        total = num1.AsInt() + num2.AsInt();
    }
}

Uživatelský vstup zpravidla přichází jako řetězce. I když jste uživatele vyzvali k zadání čísla, a i když zadali číslici, jsou data v řetězcovém formátu, i když uživatel zadá číslici a vy si ho přečtete v kódu. Proto je nutné převést řetězec na číslo. Pokud se v příkladu pokusíte provést aritmetické hodnoty bez jejich převodu, dojde k následující chybě, protože ASP.NET nemůže přidat dva řetězce:

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

Chcete-li převést hodnoty na celá čísla, zavoláte metodu AsInt . Pokud je převod ú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.

var myIntNumber = 0;
var myStringNum = "539";
if(myStringNum.IsInt()==true){
    myIntNumber = myStringNum.AsInt();
}

AsBool(), IsBool()

Převede řetězec jako "true" nebo "false" na logický typ.

var myStringBool = "True";
var myVar = myStringBool.AsBool();

AsFloat(), IsFloat()

Převede řetězec s 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řevede řetězec s desetinnou hodnotou, například 1,3 nebo 7,439, na desetinné číslo. (V ASP.NET je desetinné číslo přesnější než číslo s plovoucí desetinnou čárkou.)

var myStringDec = "10317.425";
var myDecNum = myStringDec.AsDecimal();

AsDateTime(), IsDateTime()

Převede řetězec, který představuje hodnotu data a času, na typ ASP.NET DateTime .

var myDateString = "12/27/2012";
var newDate = myDateString.AsDateTime();

ToString()

Převede jakýkoli jiný datový typ na řetězec.

int num1 = 17;
int num2 = 76;
// myString is set to 1776
string myString = num1.ToString() +
  num2.ToString();

Operátory

Operátor je klíčové slovo nebo znak, které ASP.NET sděluje, jaký typ příkazu má ve výrazu provést. Jazyk C# (a syntaxe Razor, která je na něm založená) podporuje mnoho operátorů, ale abyste mohli začít, stačí rozpoznat jenom 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)
@{ var netWorth = 150000; }
@{ var newTotal = netWorth * 2; }
@(newTotal / 2)

=

Přiřazení. Přiřadí hodnotu na pravé straně příkazu k objektu na levé straně.

var age = 17;

==

Rovnosti. Vrátí hodnotu true , pokud jsou hodnoty stejné. (Všimněte si rozdílu mezi operátorem = a operátorem == .)

var myNum = 15;
if (myNum == 15) {
    // Do something.
}

!=

Nerovnost. Vrátí hodnotu true , pokud se hodnoty nerovnají.

var theNum = 13;
if (theNum != 15) {
    // Do something.
}

< > <= >=

Menší než, větší než, menší než nebo rovno a větší než nebo rovno.

if (2 < 3) {
    // Do something.
}
var currentCount = 12;
if(currentCount >= 12) {
    // Do something.
}

+

Zřetězení, které se používá ke spojení řetězců. ASP.NET zná rozdíl mezi tímto operátorem a operátorem sčítání na základě datového typu výrazu.

// The displayed result is "abcdef".
@("abc" + "def")

+= -=

Operátory inkrementace a dekrementace, které přičtou a odečtou hodnotu 1 (v uvedeném pořadí) z proměnné.

int theCount = 0;
theCount += 1; // Adds 1 to count

.

Dot. Slouží k rozlišení objektů a jejich vlastností a metod.

var myUrl = Request.Url;
var count = Request["Count"].AsInt();

()

Závorkách. Slouží k seskupení výrazů a předávání parametrů metodám.

@(3 + 7)
@Request.MapPath(Request.FilePath);

[]

Závorkách. Používá se pro přístup k hodnotám v polích nebo kolekcích.

var income = Request["AnnualIncome"];

!

že nejste Vrátí true hodnotu na false a naopak. Obvykle se používá jako zkrácený způsob testování pro false (to znamená pro ne true).

bool taskCompleted = false;
// Processing.
if(!taskCompleted) {
    // Continue processing
}

&& ||

Logické funkce AND a OR, které slouží k propojení podmínek.

bool myTaskCompleted = false;
int totalCount = 0;
// Processing.
if(!myTaskCompleted && totalCount < 12) {
    // Continue processing.
}

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:

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

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

Pokud je http://myserver/myappweb , 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" />

V kódu se operátor používá ~ k vytvoření cest k prostředkům, jako jsou soubory obrázků, jiné webové stránky a soubory CSS. Při spuštění stránky ASP.NET prohlédnou stránku (kód i kód) a přeloží všechny ~ odkazy na příslušnou cestu.

Podmíněná logika a smyčky

ASP.NET serverový kód umožňuje provádět úlohy na základě podmínek a psát kód, který příkazy určitou dobu opakuje (to znamená kód, který spouští smyčku).

Testovací podmínky

K otestování jednoduché podmínky použijete if příkaz , který na základě zadaného testu vrátí hodnotu true nebo false:

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

Klíčové if slovo spustí blok. Skutečný test (podmínka) je v závorkách a vrací hodnotu true nebo false. Příkazy, které se spustí, pokud je test pravdivý, jsou uzavřeny ve složených závorkách. Příkaz if může obsahovat else blok, který určuje příkazy, které se mají spustit, pokud je podmínka nepravdivá:

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

Pomocí bloku můžete přidat více podmínek 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>
    }
}

V tomto příkladu platí, že pokud první podmínka v bloku if není pravdivá, je podmínka zaškrtnutá else if . Pokud je tato podmínka splněna, příkazy v else if 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 bloků else if a zavřít else blok jako podmínku "vše ostatní".

K otestování velkého počtu podmínek použijte switch blok:

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

Testovaná hodnota je v závorkách (v příkladu je to proměnná weekday ). Každý jednotlivý test používá case příkaz, který končí dvojtečkami (:). Pokud hodnota case příkazu odpovídá hodnotě testu, provede se kód v bloku daného případu. Každý příkaz Case uzavřete příkazem break . (Pokud do každého case bloku zapomenete zahrnout konec, spustí se také kód z dalšího case příkazu.) Blok switch často obsahuje default příkaz jako poslední případ pro možnost "vše ostatní", která se spustí, pokud žádný z ostatních případů není pravdivý.

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

Razor-Img10

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 použít, 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(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 v závorkách, z nichž každý končí středníkem.

  • V závorkách první příkaz (var i=10;) vytvoří čítač a inicializuje ho na 10. Nemusíte čítač i pojmenovat – můžete použít libovolnou proměnnou. Při spuštění smyčky for se čítač automaticky navyší.
  • Druhý příkaz (i < 21;) nastaví podmínku, do jakého rozsahu chcete počítat. V takovém případě chcete, aby se hodnota dostala na maximálně 20 (to znamená, že pokračujte, dokud je čítač menší než 21).
  • Třetí příkaz (i++ ) používá operátor inkrementace, který jednoduše určuje, že čítač by měl mít při každém spuštění smyčky přidanou hodnotu 1.

Uvnitř složených závorek je kód, který se spustí 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.

Razor-Img11

Pokud pracujete s kolekcí nebo polem, často používáte smyčku foreach . Kolekce je skupina podobných objektů a smyčka foreach 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. foreach Místo toho kód smyčky jednoduše pokračuje kolekcí, dokud se nedokončí.

Například následující kód vrátí položky v kolekci Request.ServerVariables , což je objekt, který obsahuje informace o webovém serveru. Používá h smyčku foreac k zobrazení názvu každé položky vytvořením nového <li> prvku v seznamu s odrážkami HTML.

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

Za foreach klíčovým slovem následují závorky, kde deklarujete proměnnou, která představuje jednu položku v kolekci (v příkladu var item), následovanou klíčovým slovem in a kolekcí, kterou chcete procházet. V těle smyčky foreach můžete získat přístup k aktuální položce pomocí proměnné, kterou jste deklarovali dříve.

Razor-Img12

Pokud chcete vytvořit smyčku pro obecné účely, použijte příkaz 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ásleduje závorky, kde určíte, countNum jak dlouho smyčka bude pokračovat (zde je kratší než 50), a pak blok, který se má opakovat. Smyčky obvykle inkrementují (přičítají) nebo dekrementují (odečtou od) proměnné nebo objektu používaného k počítání. V příkladu += operátor přidá 1 k countNum každému spuštění smyčky. (K dekrementování proměnné ve smyčce, která odpočítává, byste použili operátor -=dekrementace ).

Objekty a kolekce

Téměř všechno 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:

@{
    var path = Request.FilePath;
}

Aby bylo jasné, že odkazujete na vlastnosti a metody u objektu aktuální stránky, můžete volitelně použít klíčové slovo this k reprezentaci objektu stránky v kódu. Tady je předchozí příklad kódu s přidaným kódem this , který představuje stránku:

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

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.

    @{
        // Access the page's Request object to retrieve the Url.
        var pageUrl = this.Request.Url;
    }
    <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:

@* Array block 1: Declaring a new array using braces. *@
@{
    <h3>Team Members</h3>
    string[] teamMembers = {"Matt", "Joanne", "Robert", "Nancy"};
    foreach (var person in teamMembers)
    {
        <p>@person</p>
    }
}

U polí deklarujete konkrétní datový typ, například string, intnebo DateTime. Pokud chcete označit, že proměnná může obsahovat pole, přidejte do deklarace hranaté závorky (například string[] nebo int[]). K položkám v poli můžete přistupovat pomocí jejich pozice (indexu) nebo pomocí foreach 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.

@{
    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 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 (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:

Razor-Img13

Slovník je kolekce dvojic klíč/hodnota, ve které zadáte klíč (nebo název) pro nastavení nebo načtení odpovídající hodnoty:

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

Pokud chcete vytvořit slovník, použijete new klíčové slovo k označení, že vytváříte nový objekt slovníku. Slovník můžete proměnné přiřadit pomocí klíčového var slova . Datové typy položek ve slovníku označíte pomocí úhlových závorek ( < > ). Na konec deklarace musíte přidat 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. Případně můžete pomocí hranatých závorek označit klíč a provést jednoduché přiřazení jako v následujícím příkladu:

myScores["test4"] = 79;

Pokud chcete získat hodnotu ze slovníku, zadejte klíč do závorek:

var testScoreThree = myScores["test3"];

Volání metod s parametry

Jak jste si přečetli dříve v tomto článku, objekty, které programujete, mohou mít 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 string MapPath(string virtualPath, string baseVirtualDir, 
    bool allowCrossAppMapping);

(Řádek je zabalený, aby byl čitelnější. Nezapomeňte, že konce řádků můžete vložit téměř na libovolné místo s výjimkou vnitřních řetězců, které jsou uzavřeny v uvozovkách.)

Tato metoda vrátí fyzickou cestu na serveru, která odpovídá zadané virtuální cestě. Tři parametry pro metodu jsou virtualPath, baseVirtualDira 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.

Syntaxe Razor poskytuje dvě možnosti pro předávání parametrů metodě: poziční parametry a 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 null 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.

@{
    // Pass parameters to a method using positional parameters.
    var myPathPositional = Request.MapPath("/scripts", "/", true);
}
<p>@myPathPositional</p>

Pokud má metoda mnoho parametrů, můžete zachovat čitelnost kódu pomocí pojmenovaných parametrů. Pokud chcete volat metodu pomocí pojmenovaných parametrů, zadejte název parametru následovaný dvojtečka (:) a pak hodnotu. Výhodou pojmenovaných parametrů je, že je můžete předávat 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:

@{
    // Pass parameters to a method using named parameters.
    var myPathNamed = Request.MapPath(baseVirtualDir: "/", 
        allowCrossAppMapping: true, virtualPath: "/scripts");
}
<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í vytvořit soubor nebo získat přístup k souboru, 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í:

Razor-Img14

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.

@{
    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)
    {
        // When the user clicks the "Open File" button and posts
        // the page, try to open the created file for reading.
        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 (FileNotFoundException ex) {
            // You can use the exception object for debugging, logging, etc.
            errMsg = ex.Message;
            // Create a friendly error message for users.
            userErrMsg = "A file could not be opened, please contact "
                + "your system administrator.";
        }
        catch (DirectoryNotFoundException ex) {
            // Similar to previous exception.
            errMsg = ex.Message;
            userErrMsg = "A directory was not found, please contact "
                + "your system administrator.";
        }
    }
    else
    {
        // The first time the page is requested, create the text file.
        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 a syntaxe jazyka Visual Basic

Referenční dokumentace

ASP.NET

Jazyk C#