Sdílet prostřednictvím


Úvod do ASP.NET webové programování pomocí syntaxe Razor (Visual Basic)

, autor: Tom FitzMacken

Tento článek obsahuje přehled programování s webovými stránkami ASP.NET pomocí syntaxe Razor a jazyka Visual Basic. ASP.NET je technologie společnosti Microsoft pro provozování dynamických webových stránek na webových serverech.

Co se naučíte:

  • 8 nejlepších tipů pro programování ASP.NET webových stránek pomocí syntaxe Razor.
  • Základní programovací koncepty, které budete potřebovat.
  • Co ASP.NET kód serveru a syntaxi Razor.

Verze softwaru

  • ASP.NET Webové stránky (Razor) 3

Tento kurz funguje také s webovými stránkami ASP.NET 2.

Většina příkladů použití ASP.NET webových stránek se syntaxí Razor používá jazyk C#. Syntaxe Razor ale podporuje také Jazyk Visual Basic. Chcete-li v jazyce Visual Basic naprogramovat ASP.NET webovou stránku, vytvořte webovou stránku s příponou souboru .vbhtml a pak přidejte kód jazyka Visual Basic. Tento článek obsahuje přehled práce s jazykem a syntaxí jazyka Visual Basic při vytváření ASP.NET webových stránek.

Poznámka

Výchozí šablony webů pro Microsoft WebMatrix (Pekárna, Fotogalerie a Úvodní web atd.) jsou k dispozici ve verzích C# a Visual Basic. Šablony jazyka Visual Basic můžete nainstalovat jako balíčky NuGet. Šablony webů se instalují do kořenové složky webu do složky s názvem Šablony Microsoftu.

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

Tato část obsahuje několik tipů, které potřebujete znát, když začnete psát kód ASP.NET serveru pomocí syntaxe Razor.

1. Na stránku přidáte kód pomocí znaku @

Znak @ začíná vložené výrazy, bloky s jedním příkazem a bloky s více příkazy:

<!-- Single statement blocks  -->
@Code  Dim total = 7  End Code
@Code  Dim myMessage = "Hello World" End Code

<!-- Inline expressions -->
<p>The value of your account is: @total </p>
<p>The value of myMessage is: @myMessage</p>        
    
<!-- Multi-statement block -->    
@Code 
    Dim greeting = "Welcome to our site!"
    Dim weekDay = DateTime.Now.DayOfWeek
    Dim greetingMessage = greeting & " Today is: " & weekDay.ToString()
End Code 
<p>The greeting is: @greetingMessage</p>

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

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 najdete v tématu Práce s formuláři HTML na webech ASP.NET webových stránek.

2. Bloky kódu uzavřete do kódu... Ukončit kód

Blok kódu obsahuje jeden nebo více příkazů kódu a je uzavřený s klíčovými slovy Code a End Code. Klíčové slovo otevření Code umístěte hned za @ znak – nesmí mezi nimi být prázdné znaky.

<!-- Single statement block.  -->
@Code
    Dim theMonth = DateTime.Now.Month
End Code
<p>The numeric value of the current month: @theMonth</p>

<!-- Multi-statement block. -->
@Code
    Dim outsideTemp = 79
    Dim weatherMessage = "Hello, it is " & outsideTemp & " degrees."
End Code 
<p>Today's weather: @weatherMessage</p>

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

Razor-Img2

3. Uvnitř bloku ukončete každý příkaz kódu koncem řádku.

V bloku kódu jazyka Visual Basic končí každý příkaz koncem řádku. (Později v článku uvidíte způsob, jak v případě potřeby zabalit dlouhý příkaz kódu do více řádků.)

<!-- Single statement block. -->
@Code
    Dim theMonth = DateTime.Now.Month
End Code

<!-- Multi-statement block. -->
@Code
    Dim outsideTemp = 79
    Dim weatherMessage = "Hello, it is " & outsideTemp & " degrees."
End Code 

<!-- An inline expression, so no line break needed. -->
<p>Today's weather: @weatherMessage</p>

4. K ukládání hodnot se používají proměnné.

Do proměnné můžete ukládat hodnoty, včetně řetězců, čísel a kalendářních dat atd. Novou proměnnou vytvoříte pomocí klíčového Dim slova . Hodnoty proměnných můžete vložit přímo na stránku pomocí příkazu @.

<!-- Storing a string -->
@Code 
    Dim welcomeMessage = "Welcome, new members!"
End Code
<p>@welcomeMessage</p>
    
<!-- Storing a date -->
@Code 
    Dim year = DateTime.Now.Year
End Code

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

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

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:

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

Chcete-li vložit dvojité uvozovky do řetězcové hodnoty, vložte dva znaky dvojitých uvozovek. Pokud chcete, aby se znak dvojitých uvozovek objevil jednou ve výstupu stránky, zadejte ho jako "" v řetězci v uvozovkách, a pokud chcete, aby se zobrazil dvakrát, zadejte ho jako """" v řetězci v uvozovkách.

<!-- Embedding double quotation marks in a string -->
@Code 
    Dim myQuote = "The person said: ""Hello, today is Monday."""
End Code
<p>@myQuote</p>

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

Razor-Img4

6. V kódu jazyka Visual Basic se nerozlišuje velká a malá písmena.

Jazyk Visual Basic nerozlišuje velká a malá písmena. Programovací klíčová slova (například Dim, Ifa True) a názvy proměnných (například myString, nebo subTotal) lze zapsat v každém případě.

Následující řádky kódu přiřazují hodnotu proměnné lastname pomocí názvu malými písmeny a pak hodnotu proměnné vypíše na stránku pomocí názvu velkými písmeny.

@Code 
    Dim lastName = "Smith"
    ' Keywords like dim are also not case sensitive.
    DIM someNumber = 7
End Code
<p>The value of the <code>lastName</code> variable is: @LASTNAME</p>

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

vb-syntax-5

7. Velká část kódování zahrnuje práci s objekty.

Objekt představuje věc, kterou můžete programovat – stránku, textové pole, soubor, obrázek, webový požadavek, e-mailovou zprávu, záznam zákazníka (řádek databáze) atd. Objekty mají vlastnosti, které popisují jejich vlastnosti – objekt textového pole má Text vlastnost, objekt požadavku vlastnost Url , e-mailová zpráva má From vlastnost a objekt zákazníka vlastnost FirstName . Objekty mají také metody, které jsou "příkazy", které mohou provádět. Mezi příklady patří metoda objektu Save souboru, metoda objektu Rotate obrázku a metoda e-mailového objektu Send .

Často budete pracovat s objektem Request , který vám poskytne informace, jako jsou hodnoty polí formuláře na stránce (textová pole atd.), jaký typ prohlížeče vytvořil požadavek, adresa URL stránky, identita uživatele atd. Tento příklad ukazuje, jak získat přístup k vlastnostem objektu Request a jak volat MapPath metodu objektu Request , která poskytuje absolutní cestu stránky na serveru:

<table border="1"> 
    <tr>
        <td>Requested URL</td>
        <td>Relative Path</td>
        <td>Full Path</td>
        <td>HTTP Request Type</td>
    </tr>
    <tr>
        <td>@Request.Url</td>
        <td>@Request.FilePath</td>
        <td>@Request.MapPath(Request.FilePath)</td>
        <td>@Request.RequestType</td>
    </tr>
</table>

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

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

@Code
   Dim result = ""
   If IsPost Then
      result = "This page was posted using the Submit button."
   Else
      result = "This was the first request for this page."
   End If
End Code
<!DOCTYPE html>
<html lang="en">
    <head>
        <meta charset="utf-8" />
        <title>Write Code that Makes Decisions</title>
    </head>
<body>
    
    <form method="POST" action="" >
        <input type="Submit" name="Submit" value="Submit"/>
        <p>@result</p>
    </form>
    
</body>
</html>

If IsPost Příkaz je zkrácený způsob psaní If IsPost = True. Spolu s If příkazy existují různé způsoby testování podmínek, opakování bloků kódu atd., které jsou popsány dále v tomto článku.

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

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

  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.

    @Code
        Dim total = 0
        Dim totalMessage = ""
        if IsPost Then
            ' Retrieve the numbers that the user entered.
            Dim num1 = Request("text1")
            Dim num2 = Request("text2")
            ' Convert the entered strings into integers numbers and add.
            total = num1.AsInt() + num2.AsInt()
            totalMessage = "Total = " & total
        End If
    End Code
    <!DOCTYPE html>
    <html lang="en">
        <head>
            <meta charset="utf-8" />
            <title>Adding Numbers</title>
            <style type="text/css">
                body {background-color: beige; font-family: Verdana, Ariel; 
                    margin: 50px;
                    }
                form {padding: 10px; border-style: solid; width: 250px;}
            </style>
        </head>
    <body>
        <p>Enter two whole numbers and click <strong>Add</strong> to display the result.</p>
        <p></p>
        <form action="" method="post">
        <p><label for="text1">First Number:</label>
        <input type="text" name="text1" />
        </p>
        <p><label for="text2">Second Number:</label>
        <input type="text" name="text2" />
        </p>
        <p><input type="submit" value="Add" /></p>
        </form>
        <p>@totalMessage</p>
    </body>
    </html>
    

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

    • Znak @ začne první blok kódu na stránce a předchází totalMessage proměnné vložené v dolní části.
    • Blok v horní části stránky je uzavřený v Code...End Code.
    • Proměnné total, , 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 jazyka Visual Basic nerozliňuje malá a velká písmena, při totalMessage použití proměnné v dolní části stránky stačí, aby její název odpovídal pouze pravopisu deklarace proměnné v horní části stránky. Na obalu nezáleží.
    • Výraz num1.AsInt() + num2.AsInt() ukazuje, jak pracovat s objekty a metodami. Metoda AsInt pro každou proměnnou převede řetězec zadaný uživatelem na celé číslo (celé číslo), které lze přidat.
    • 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í stránky se kód If IsPost 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. (Před spuštěním se ujistěte, že je stránka vybraná v pracovním prostoru Soubory .) Zadejte dvě celá čísla a klikněte na tlačítko Přidat .

    Razor-Img7

Jazyk a syntaxe jazyka Visual Basic

Dříve jste viděli základní příklad, jak vytvořit ASP.NET webovou stránku a jak přidat kód serveru do kódu HTML. Zde se naučíte základy psaní kódu ASP.NET serveru pomocí syntaxe Razor , tj. pravidel programovacího jazyka, pomocí jazyka Visual Basic.

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

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

V blocích kódu serveru budete často chtít na stránku vytvořit výstup textu a značky. Pokud blok kódu serveru obsahuje text, který není kódem a který by se místo toho měl vykreslovat tak, jak je, musí být ASP.NET schopný tento text odlišit od kódu. Existuje několik způsobů, jak to udělat.

  • Uzavřete text do elementu bloku HTML, jako je <p></p> nebo <em></em>:

    @If IsPost Then
        ' This line has all content between matched <p> tags.
        @<p>Hello, the time is @DateTime.Now and this page is a postback!</p> 
    Else
        ' All content between matched tags, followed by server code.
        @<p>Hello, <em>Stranger!</em> today is: </p> @DateTime.Now
    End If
    

    Element HTML může obsahovat text, další elementy HTML a výrazy kódu serveru. Když ASP.NET uvidí počáteční značku HTML (například <p>), vykreslí v prohlížeči všechno, co element a jeho obsah je (a přeloží výrazy serverového kódu).

  • @: Použijte operátor nebo <text> element . Výstupem @: je jeden řádek obsahu, který obsahuje prostý text nebo chybějící značky HTML; <text> element uzavírá více řádků výstupu. Tyto možnosti jsou užitečné, pokud nechcete vykreslit element HTML jako součást výstupu.

    @If IsPost Then
        ' Plain text followed by an unmatched HTML tag and server code.
        @:The time is: <br /> @DateTime.Now
        ' Server code and then plain text, matched tags, and more text.
        @DateTime.Now @:is the <em>current</em> time.
    End If
    

    Následující příklad opakuje předchozí příklad, ale používá jeden pár značek <text> k uzavření textu, který se má vykreslit.

    @If IsPost Then
        @<text>
        The time is: <br /> @DateTime.Now
        @DateTime.Now is the <em>current</em> time.
        </text>
    End If
    

    V následujícím příkladu <text> značky a </text> ohraničí tři řádky, z nichž všechny obsahují text a chybějící značky HTML (<br />), kód serveru a odpovídající značky HTML. Znovu můžete také před každým řádkem použít operátor zvlášť @: . Funguje to v obou směrech.

    @Code
        dim minTemp = 75 
        @<text>It is the month of @DateTime.Now.ToString("MMMM"), and  
        it's a <em>great</em> day! <p>You can go swimming if it's at 
        least @minTemp degrees.</p></text>
    End Code
    

    Poznámka

    Když vypíšete text, jak je znázorněno v této části – pomocí elementu HTML, operátoru @: nebo elementu <text> – ASP.NET výstup kódovat ve formátu HTML. (Jak jsme uvedli dříve, ASP.NET kóduje výstup výrazů serverového kódu a bloků kódu serveru, kterým předchází @, s výjimkou zvláštních případů uvedených v této části.)

Prázdné znaky

Nadbytečné mezery v příkazu (a mimo řetězcový literál) nemají na příkaz vliv:

@Code Dim personName =    "Smith"    End Code

Rozdělení dlouhých příkazů na více řádků

Dlouhý příkaz kódu můžete rozdělit na více řádků pomocí podtržítka _ (který se v jazyce Visual Basic nazývá znak pokračování) za každým řádkem kódu. Pokud chcete příkaz rozdělit na další řádek, přidejte na konec řádku mezeru a potom znak pokračování. Pokračujte příkazem na dalším řádku. Příkazy můžete zabalit na tolik řádků, kolik potřebujete, abyste zlepšili čitelnost. Následující příkazy jsou stejné:

@Code
    Dim familyName _
    =  "Smith" 
End Code

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

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

@Code 
    ' Doesn't work.
    Dim test = "This is a long _
      string"
End Code

Pokud chcete zkombinovat dlouhý řetězec, který se zalamuje do více řádků jako výše uvedený kód, budete muset použít operátor zřetězení (&), který uvidíte dále v tomto článku.

Komentáře ke kódu

Komentáře umožňují zanechat poznámky pro sebe nebo pro ostatní. Komentáře syntaxe Razor mají předponu @* a končí na *@.

@* A single-line comment is added like this example. *@
    
@*
    This is a multiline code comment. 
    It can continue for any number of lines.
*@

V blocích kódu můžete použít komentáře syntaxe Razor nebo můžete použít běžný znak komentáře jazyka Visual Basic, což je jedna uvozovka (') s předponou každého řádku.

@Code
    ' You can make comments in blocks by just using ' before each line.
End Code
    
@Code
    ' There is no multi-line comment character in Visual Basic. 
    ' You use a ' before each line you want to comment. 
End Code

Proměnné

Proměnná je pojmenovaný objekt, který používáte k ukládání dat. Proměnné můžete pojmenovat cokoli, ale název musí začínat abecedním znakem a nesmí obsahovat prázdné znaky ani vyhrazené znaky. Jak jste viděli dříve, v jazyce Visual Basic nezáleží na písmenech v názvu proměnné.

Proměnné a datové typy

Proměnná může mít konkrétní datový typ, který určuje, jaký druh dat je v proměnné uložený. Můžete mít řetězcové proměnné, které ukládají řetězcové hodnoty (například "Hello world"), celočíselné proměnné, které ukládají celočíselné hodnoty (například 3 nebo 79), a proměnné kalendářních dat, které ukládají hodnoty kalendářních dat v různých formátech (například 12. 4. 2012 nebo březen 2009). A existuje mnoho dalších datových typů, které můžete použít.

Nemusíte ale zadávat typ proměnné. Ve většině případů ASP.NET dokáže zjistit typ na základě toho, jak se data v proměnné používají. (Občas je nutné zadat typ; uvidíte příklady, kde to platí.)

Pokud chcete deklarovat proměnnou bez zadání typu, použijte Dim plus název proměnné (například Dim myVar). Pokud chcete deklarovat proměnnou typu, použijte Dim plus název proměnné, za kterým As následuje a pak název typu (například Dim myVar As String).

@Code
    ' Assigning a string to a variable.
    Dim greeting = "Welcome" 
    
    ' Assigning a number to a variable.
    Dim theCount = 3
    
    ' Assigning an expression to a variable.
    Dim monthlyTotal = theCount + 5
    
    ' Assigning a date value to a variable.
    Dim today = DateTime.Today
    
    ' Assigning the current page's URL to a variable.
    Dim myPath = Request.Url
    
    ' Declaring variables using explicit data types.
    Dim name as String = "Joe"
    Dim count as Integer = 5
    Dim tomorrow as DateTime = DateTime.Now.AddDays(1)
End Code

Následující příklad ukazuje některé vložené výrazy, které používají proměnné na webové stránce.

@Code
    ' Embedding the value of a variable into HTML markup.
    ' Precede the markup with @ because we are in a code block.
    @<p>@greeting, friends!</p>
End Code

<!-- Using a variable with an inline expression in HTML. --> 
<p>The predicted annual total is: @( monthlyTotal * 12)</p>

<!--  Displaying the page URL with a variable. --> 
<p>The URL to this page is:  @myPath</p>

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

Razor-Img9

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

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

Nejběžnějším případem je, že je nutné převést řetězec na jiný typ, například na celé číslo nebo datum. Následující příklad ukazuje typický případ, kdy je nutné převést řetězec na číslo.

@Code
    Dim total = 0
    Dim totalMessage = ""
    if IsPost Then
        ' Retrieve the numbers that the user entered.
        Dim num1 = Request("text1")
        Dim num2 = Request("text2")
        ' Convert the entered strings into integers numbers and add.
        total = num1.AsInt() + num2.AsInt()
        totalMessage = "Total = " & total
    End If
End Code

Uživatelský vstup zpravidla přichází jako řetězce. I když uživatele vyzvete, aby zadal číslo, a i když zadá číslici, když se uživatelský vstup odešle a vy ho přečtete v kódu, data budou v řetězcovém formátu. Proto je nutné převést řetězec na číslo. Pokud se v tomto příkladu pokusíte provést aritmetické operace hodnot bez převodu, dojde k následující chybě, protože ASP.NET nemůže přidat dva řetězce:

Cannot implicitly convert type 'string' to 'int'.

Chcete-li převést hodnoty na celá čísla, zavolejte metodu AsInt . Pokud převod proběhne úspěšně, můžete čísla sečíst.

V následující tabulce jsou uvedeny některé běžné metody převodu a testování proměnných.

Metoda

Popis

Příklad


AsInt(), IsInt()

Převede řetězec, který představuje celé číslo (například "593"), na celé číslo.

Dim myIntNumber = 0
Dim myStringNum = "539"
If myStringNum.IsInt() Then
    myIntNumber = myStringNum.AsInt()
End If

AsBool(), IsBool()

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

Dim myStringBool = "True"
Dim myVar = myStringBool.AsBool()

AsFloat(), IsFloat()

Převede řetězec, který má desetinnou hodnotu jako "1,3" nebo "7,439", na číslo s plovoucí desetinnou čárkou.

Dim myStringFloat = "41.432895"
Dim myFloatNum = myStringFloat.AsFloat()

AsDecimal(), IsDecimal()

Převede řetězec, který má desetinnou hodnotu jako "1,3" nebo "7,439", na desetinné číslo. (V ASP.NET je desetinné číslo přesnější než číslo s plovoucí desetinnou čárkou.)

Dim myStringDec = "10317.425"
Dim myDecNum = myStringDec.AsDecimal()

AsDateTime(), IsDateTime()

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

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

ToString()

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

Dim num1 As Integer = 17
Dim num2 As Integer = 76

' myString is set to 1776
Dim myString as String = num1.ToString() & _
    num2.ToString()

Operátory

Operátor je klíčové slovo nebo znak, který ASP.NET říká, jaký druh příkazu má výraz provést. Visual Basic podporuje mnoho operátorů, ale abyste mohli začít s vývojem ASP.NET webových stránek, stačí jich rozpoznat jen několik. Následující tabulka shrnuje nejběžnější operátory.

Operátor

Popis

Příklady


+ - * /

Matematické operátory používané v číselných výrazech

@(5 + 13)

Dim netWorth = 150000
Dim newTotal = netWorth * 2
@(newTotal / 2)

=

Přiřazení a rovnost. V závislosti na kontextu buď přiřadí hodnotu na pravé straně příkazu objektu na levé straně, nebo zkontroluje rovnost hodnot.

Dim age = 17

Dim income = Request("AnnualIncome")

<>

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

Dim theNum = 13
If theNum <> 15 Then
    ' Do something.
End If

< > <= >=

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

If 2 < 3 Then
    ' Do something.
End If

Dim currentCount = 12
If currentCount >= 12 Then
    ' Do something.
End If

&

Zřetězení, které se používá ke spojení řetězců.

' The displayed result is "abcdef".
@("abc" & "def")

+= -=

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

Dim theCount As Integer = 0
theCount += 1 ' Adds 1 to count

.

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

Dim myUrl = Request.Url
Dim count = Request("Count").AsInt()

()

Závorkách. Používá se k seskupení výrazů, k předávání parametrů metodám a k přístupu ke členům polí a kolekcí.

@(3 + 7)

@Request.MapPath(Request.FilePath)

Not

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

Dim taskCompleted As Boolean = False
' Processing.
If Not taskCompleted Then 
    ' Continue processing
End If

AndAlso OrElse

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

Dim myTaskCompleted As Boolean = false
Dim totalCount As Integer = 0          
' Processing.
If (Not myTaskCompleted) AndAlso _
         totalCount < 12 Then 
    ' Continue processing.
End If

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

Často budete pracovat s cestami k souborům a složkám v kódu. Tady je příklad struktury fyzických složek pro web, jak se může zobrazit na vašem vývojovém počítači:

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

Tady jsou některé základní podrobnosti o adresách URL a cestách:

  • Adresa URL začíná názvem domény (http://www.example.com) nebo názvem serveru (http://localhost, http://mycomputer).
  • Adresa URL odpovídá fyzické cestě na hostitelském počítači. Může například http://myserver odpovídat složce C:\websites\mywebsite na serveru.
  • Virtuální cesta je zkratka pro reprezentaci cest v kódu, aniž by bylo nutné zadávat úplnou cestu. Zahrnuje část adresy URL, která následuje za názvem domény nebo serveru. Při použití virtuálních cest můžete kód přesunout do jiné domény nebo serveru, aniž byste museli cesty aktualizovat.

Tady je příklad, který vám pomůže porozumět rozdílům:

Úplná adresa URL http://mycompanyserver/humanresources/CompanyPolicy.htm
Název serveru mycompanyserver
Virtuální cesta /humanresources/CompanyPolicy.htm
Fyzická cesta C:\mywebsites\humanresources\CompanyPolicy.htm

Virtuální kořen je /, stejně jako kořen jednotky C: je . (Cesty virtuálních složek vždy používají lomítka.) Virtuální cesta ke složce nemusí mít stejný název jako fyzická složka. může to být alias. (Na produkčních serverech virtuální cesta zřídka odpovídá přesné fyzické cestě.)

Při práci se soubory a složkami v kódu je někdy potřeba odkazovat na fyzickou cestu a někdy na virtuální cestu v závislosti na objektech, se kterými pracujete. ASP.NET poskytuje tyto nástroje pro práci s cestami k souborům a složkám v kódu: metodu Server.MapPath a operátor a Href metodu~.

Převod virtuálních na fyzické cesty: Metoda Server.MapPath

Metoda Server.MapPath převede virtuální cestu (například /default.cshtml) na absolutní fyzickou cestu (například C:\WebSites\MyWebSiteFolder\default.cshtml). Tuto metodu použijete pokaždé, když potřebujete úplnou fyzickou cestu. Typickým příkladem je, když čtete nebo píšete textový soubor nebo soubor obrázku na webovém serveru.

Obvykle neznáte absolutní fyzickou cestu k webu na serveru hostitelského webu, takže tato metoda může převést cestu, kterou znáte – virtuální cestu – na odpovídající cestu na serveru za vás. Virtuální cestu k souboru nebo složce předáte metodě a ta vrátí fyzickou cestu:

@Code
    Dim dataFilePath = "~/dataFile.txt"
End Code    

<!-- Displays a physical path C:\Websites\MyWebSite\datafile.txt  --> 
<p>@Server.MapPath(dataFilePath)</p>

Odkazování na virtuální kořenový adresář: operátor ~ a metoda Href

V souboru .cshtml nebo .vbhtml můžete odkazovat na virtuální kořenovou cestu pomocí operátoru ~ . To je velmi užitečné, protože můžete přesouvat stránky na webu a žádné odkazy, které obsahují na jiné stránky, nebudou poškozené. Je to také užitečné pro případ, že byste někdy přesunuli web na jiné místo. Tady je několik příkladů:

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

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

Ve značkách pomocí operátoru ~ vytvoříte cesty k prostředkům, jako jsou soubory obrázků, jiné webové stránky a soubory CSS. Po spuštění stránky ASP.NET prohlédnou stránku (kód i revize) a přeloží všechny ~ odkazy na příslušnou cestu.

Podmíněná logika a smyčky

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

Testovací podmínky

K otestování jednoduché podmínky použijte If...Then příkaz, který vrátí True nebo False na základě vámi zadaného testu:

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

Klíčové If slovo spustí blok. Skutečný test (podmínka) se řídí klíčovým slovem If a vrátí hodnotu true nebo false. Příkaz If končí na Then. Příkazy, které se spustí, pokud je test pravdivý, jsou uzavřeny a IfEnd If. Příkaz If může obsahovat Else blok, který určuje příkazy, které se mají spustit, pokud je podmínka nepravda:

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

Pokud příkaz If spustí blok kódu, nemusíte k zahrnutí bloků použít normální Code...End Code příkazy. Stačí přidat @ do bloku a bude to fungovat. Tento přístup funguje s dalšími programovacími If klíčovými slovy jazyka Visual Basic, za nimiž následují bloky kódu, včetně For, For Each, Do Whileatd.

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

Pomocí jednoho nebo více ElseIf bloků můžete přidat více podmínek:

@Code
    Dim theBalance = 4.99
    If theBalance = 0 Then
        @<p>You have a zero balance.</p>
    ElseIf theBalance > 0 AndAlso theBalance <= 5 Then
        ' If the balance is above 0 but less than
        ' or equal to $5, display this message.
        @<p>Your balance of $@theBalance is very low.</p>
    Else
        ' For balances greater than $5, display balance.
        @<p>Your balance is: $@theBalance</p>
    End If    
End Code

Pokud v tomto příkladu není první podmínka v If bloku pravdivá, je podmínka zaškrtnutá ElseIf . Pokud je tato podmínka splněna, příkazy v ElseIf bloku se spustí. Pokud není splněna žádná z podmínek, příkazy v Else bloku se spustí. Můžete přidat libovolný počet ElseIf bloků a zavřít Else blok jako podmínku "všechno ostatní".

Pokud chcete otestovat velký počet podmínek, použijte Select Case blok:

@Code
    Dim weekday = "Wednesday"
    Dim greeting = ""
    
    Select Case weekday
        Case "Monday"
            greeting = "Ok, it's a marvelous Monday."
        Case "Tuesday"
            greeting = "It's a tremendous Tuesday."
        Case "Wednesday"
            greeting = "Wild Wednesday is here!"
        Case Else
            greeting = "It's some other day, oh well."
    End Select
End Code
<p>Since it is @weekday, the message for today is: @greeting</p>

Testovaná hodnota je v závorkách (v příkladu je to proměnná den v týdnu). Každý jednotlivý test používá Case příkaz, který vypíše hodnotu. Pokud hodnota Case příkazu odpovídá testovací hodnotě, provede se kód v daném Case bloku.

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

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 provést, můžete použít smyčku For . Tento druh smyčky je zvlášť užitečný pro odpočítávání nebo odpočítávání:

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

Smyčka začíná klíčovým slovem For následovaným třemi prvky:

  • Okamžitě za příkazem For deklarujete proměnnou čítače (nemusíte používat Dim) a pak označíte rozsah, jako v i = 10 to 20. To znamená, že proměnná i začne počítat na hodnotě 10 a bude pokračovat, dokud nedosáhne hodnoty 20 (včetně).
  • Mezi příkazy For a Next je obsah bloku. Může obsahovat jeden nebo více příkazů kódu, které se spouštějí s každou smyčkou.
  • Příkaz Next i ukončí smyčku. Zvýší čítač a spustí další iteraci smyčky.

Řádek kódu mezi řádky For a Next obsahuje kód, který se spouští pro každou iteraci smyčky. Kód pokaždé vytvoří nový odstavec (<p> element) a přidá do výstupu čáru zobrazující hodnotu i (čítač). Když spustíte tuto stránku, příklad vytvoří 11 řádků zobrazující výstup, přičemž text na každém řádku označuje číslo položky.

Razor-Img11

Pokud pracujete s kolekcí nebo polem, často používáte smyčku For Each . Kolekce je skupina podobných objektů a smyčka For Each umožňuje provést úkol pro každou položku v kolekci. Tento typ smyčky je vhodný pro kolekce, protože na rozdíl od For smyčky nemusíte čítač navyšovat ani nastavovat limit. Místo toho For Each kód smyčky jednoduše prochází kolekci, dokud se nedokončí.

Tento příklad vrátí položky v kolekci Request.ServerVariables (která obsahuje informace o vašem webovém serveru). Používá smyčku For Each k zobrazení názvu každé položky vytvořením nového <li> prvku v seznamu s odrážkami HTML.

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

Za For Each klíčovým slovem následuje proměnná, která představuje jednu položku v kolekci (v příkladu myItem), následovanou klíčovým slovem In a kolekcí, kterou chcete procházet. V těle smyčky For Each můžete k aktuální položce přistupovat pomocí proměnné, kterou jste deklarovali dříve.

Razor-Img12

Pokud chcete vytvořit smyčku pro obecné účely, použijte příkaz Do While :

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

Tato smyčka začíná klíčovým slovem Do While , následovaným podmínkou a blokem, který se má opakovat. Smyčky obvykle inkrementují (přičítají) nebo dekretují (odečítají od) proměnné nebo objektu používaného k počítání. V tomto příkladu += operátor přidá hodnotu 1 k hodnotě proměnné při každém spuštění smyčky. (Chcete-li snížit proměnnou ve smyčce, která odpočítává, byste použili operátor -=dekrementace .)

Objekty a kolekce

Téměř vše na ASP.NET webu je objekt, včetně samotné webové stránky. Tato část popisuje některé důležité objekty, se kterými budete v kódu často pracovat.

Objekty stránky

Nejzásadnějším objektem v ASP.NET je stránka. K vlastnostem objektu stránky můžete přistupovat přímo bez opravňujícího objektu. Následující kód získá cestu k souboru stránky pomocí objektu Request stránky:

@Code
    Dim path = Request.FilePath
End Code

Vlastnosti objektu Page můžete použít k získání velkého množství informací, například:

  • Request. Jak jste už viděli, jedná se o kolekci informací o aktuálním požadavku, včetně typu prohlížeče, který požadavek vytvořil, adresy URL stránky, identity uživatele atd.

  • Response. Jedná se o kolekci informací o odpovědi (stránce), které se po dokončení spuštění kódu serveru odešlou do prohlížeče. Tuto vlastnost můžete například použít k zápisu informací do odpovědi.

    @Code
        ' Access the page's Request object to retrieve the URL.
        Dim pageUrl = Request.Url
    End Code
        <a href="@pageUrl">My page</a>
    

Objekty kolekce (pole a slovníky)

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

Často budete pracovat s daty v kolekcích. Dva běžné typy kolekcí jsou pole a slovník. Pole je užitečné, když chcete uložit kolekci podobných položek, ale nechcete vytvořit samostatnou proměnnou pro každou položku:

<h3>Team Members</h3>
@Code
    Dim teamMembers() As String = {"Matt", "Joanne", "Robert", "Nancy"}
    For Each name In teamMembers
        @<p>@name</p>
    Next name
End Code

U polí deklarujete konkrétní datový typ, například String, Integernebo DateTime. Pokud chcete označit, že proměnná může obsahovat pole, přidejte k názvu proměnné v deklaraci závorky (například Dim myVar() As String). K položkám v poli můžete přistupovat pomocí jejich pozice (indexu) nebo pomocí For Each příkazu . Indexy pole jsou založené na nule – to znamená, že první položka je na pozici 0, druhá položka je na pozici 1 atd.

@Code
    Dim teamMembers() As String = {"Matt", "Joanne", "Robert", "Nancy"}
    @<p>The number of names in the teamMembers array: @teamMembers.Length </p>
    @<p>Robert is now in position: @Array.IndexOf(teamMembers, "Robert")</p>
    @<p>The array item at position 2 (zero-based) is @teamMembers(2)</p>
    @<h3>Current order of team members in the list</h3>
    For Each name In teamMembers
        @<p>@name</p>
    Next name
    @<h3>Reversed order of team members in the list</h3>
    Array.Reverse(teamMembers)
    For Each reversedItem In teamMembers
        @<p>@reversedItem</p>
    Next reversedItem
End Code

Počet položek v poli můžete určit tak, že získáte jeho Length vlastnost. Pokud chcete získat pozici konkrétní položky v poli (tj. prohledávat pole), použijte metodu Array.IndexOf . Můžete také provádět akce, jako je obrácení obsahu pole ( Array.Reverse metoda) nebo řazení obsahu ( Array.Sort metoda).

Výstup kódu pole řetězců zobrazený v prohlížeči:

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:

@Code
    Dim myScores = New Dictionary(Of String, Integer)()
    myScores.Add("test1", 71)
    myScores.Add("test2", 82)
    myScores.Add("test3", 100)
    myScores.Add("test4", 59)
End Code
<p>My score on test 3 is: @myScores("test3")%</p>
@Code 
    myScores("test4") = 79
End Code
<p>My corrected score on test 4 is: @myScores("test4")%</p>

Pokud chcete vytvořit slovník, použijete New klíčové slovo k označení, že vytváříte nový Dictionary objekt. Slovník můžete proměnné přiřadit pomocí klíčového Dim slova . Datové typy položek ve slovníku označíte pomocí závorek ( ( ) ). Na konec deklarace musíte přidat další dvojici závorek, protože se ve skutečnosti jedná o metodu, která vytvoří nový slovník.

Chcete-li přidat položky do slovníku, můžete volat metodu Add proměnné slovníku (myScores v tomto případě) a pak zadat klíč a hodnotu. Alternativně můžete klíč označit pomocí závorek a provést jednoduché přiřazení jako v následujícím příkladu:

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

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

@myScores("test4")

Volání metod s parametry

Jak jste viděli dříve v tomto článku, objekty, které programujete, mají metody. Database Například objekt může mít metodu Database.Connect . Mnoho metod má také jeden nebo více parametrů. Parametr je hodnota, kterou předáte metodě, aby metoda mohla dokončit svůj úkol. Podívejte se například na deklaraci Request.MapPath metody , která přebírá tři parametry:

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

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

Pokud používáte Visual Basic se syntaxí Razor, máte dvě možnosti pro předávání parametrů metodě: poziční parametry nebo pojmenované parametry. Pokud chcete volat metodu pomocí pozičních parametrů, předáte parametry ve striktním pořadí, které je zadáno v deklaraci metody. (Toto pořadí obvykle znáte z dokumentace k metodě.) Musíte postupovat podle pořadí a nemůžete přeskočit žádný z parametrů – v případě potřeby předáte prázdný řetězec ("") nebo hodnotu null pro poziční parametr, pro který nemáte hodnotu.

Následující příklad předpokládá, že na webu máte složku s názvem scripts . Kód volá metodu Request.MapPath a předává hodnoty tří parametrů ve správném pořadí. Pak zobrazí výslednou namapovanou cestu.

@Code
    ' Pass parameters to a method using positional parameters.
    Dim myPathPositional = Request.MapPath("/scripts", "/", true)
End Code
<p>@myPathPositional</p>

Pokud je pro metodu mnoho parametrů, můžete pomocí pojmenovaných parametrů udržovat kód čistější a čitelnější. Pokud chcete volat metodu pomocí pojmenovaných parametrů, zadejte název := parametru a pak zadejte hodnotu . Výhodou pojmenovaných parametrů je, že je můžete přidat v libovolném pořadí. (Nevýhodou je, že volání metody není tak kompaktní.)

Následující příklad volá stejnou metodu jako výše, ale k zadání hodnot používá pojmenované parametry:

@Code
    ' Pass parameters to a method using named parameters.
    Dim myPathNamed = Request.MapPath(baseVirtualDir:= "/", allowCrossAppMapping:= true, virtualPath:= "/scripts")
End Code
<p>@myPathNamed</p>

Jak vidíte, parametry se předávají v jiném pořadí. Pokud ale spustíte předchozí příklad a tento příklad, vrátí se stejná hodnota.

Zpracování chyb

Try-Catch příkazy

Často budete mít v kódu příkazy, které můžou selhat z důvodů, které jsou mimo vaši kontrolu. Příklad:

  • Pokud se váš kód pokusí otevřít, vytvořit, přečíst nebo zapsat soubor, může dojít k nejrůznějším chybám. Požadovaný soubor nemusí existovat, může být uzamčený, kód nemusí mít oprávnění atd.
  • Podobně platí, že pokud se váš kód pokusí aktualizovat záznamy v databázi, může docházet k problémům s oprávněními, může dojít k ukončení připojení k databázi, uložená data můžou být neplatná atd.

Z programovacího hlediska se těmto situacím říká výjimky. Pokud váš kód narazí na výjimku, vygeneruje (vyvolá) chybovou zprávu, která je v nejlepším případě pro uživatele obtěžující.

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.

@Code
    Dim dataFilePath = "~/dataFile.txt"
    Dim fileContents = ""
    Dim physicalPath = Server.MapPath(dataFilePath)
    Dim userMessage = "Hello world, the time is " + DateTime.Now
    Dim userErrMsg = ""
    Dim errMsg = ""
    
    If IsPost Then
        ' When the user clicks the "Open File" button and posts
        ' the page, try to open the file.
        Try
            ' This code fails because of faulty path to the file.
            fileContents = File.ReadAllText("c:\batafile.txt")
            
            ' This code works. To eliminate error on page, 
            ' comment the above line of code and uncomment this one.
            ' fileContents = File.ReadAllText(physicalPath)
            
        Catch ex As FileNotFoundException
            ' You can use the exception object for debugging, logging, etc.
            errMsg = ex.Message
            ' Create a friendly error message for users.
            userErrMsg = "The file could not be opened, please contact " _
                & "your system administrator."
                
        Catch ex As DirectoryNotFoundException
            ' Similar to previous exception.
            errMsg = ex.Message
            userErrMsg = "The file could not be opened, please contact " _
                & "your system administrator."
        End Try
    Else
        ' The first time the page is requested, create the text file.
        File.WriteAllText(physicalPath, userMessage)
    End If
End Code
<!DOCTYPE html>
<html lang="en">
    <head>
        <meta charset="utf-8" />
        <title>Try-Catch Statements</title>
    </head>
    <body>  
    <form method="POST" action="" >
      <input type="Submit" name="Submit" value="Open File"/>
    </form>
    
    <p>@fileContents</p>
    <p>@userErrMsg</p>
    
    </body>
</html>

Další materiály

Referenční dokumentace