Udostępnij za pośrednictwem


Wprowadzenie do ASP.NET programowania internetowego przy użyciu składni Razor (Visual Basic)

– autor Tom FitzMacken

Ten artykuł zawiera omówienie programowania za pomocą ASP.NET Stron internetowych przy użyciu składni Razor i języka Visual Basic. ASP.NET to technologia firmy Microsoft do uruchamiania dynamicznych stron internetowych na serwerach internetowych.

Czego się nauczysz:

  • 8 najlepszych porad programistycznych dotyczących rozpoczynania programowania ASP.NET stron internetowych przy użyciu składni Razor.
  • Podstawowe pojęcia programistyczne, które będą potrzebne.
  • Czym jest ASP.NET kod serwera i składnia Razor.

Wersje oprogramowania

  • ASP.NET Web Pages (Razor) 3

Ten samouczek działa również z ASP.NET Web Pages 2.

Większość przykładów używania ASP.NET stron internetowych ze składnią Razor używa języka C#. Jednak składnia Razor obsługuje również język Visual Basic. Aby zaprogramować ASP.NET stronę internetową w języku Visual Basic, należy utworzyć stronę internetową z rozszerzeniem nazwy pliku vbhtml , a następnie dodać kod Języka Visual Basic. Ten artykuł zawiera omówienie pracy z językiem i składnią języka Visual Basic w celu utworzenia ASP.NET stron internetowych.

Uwaga

Domyślne szablony witryn sieci Web programu Microsoft WebMatrix (Piekarnia, Galeria zdjęć i Witryna startowa itp.) są dostępne w wersjach C# i Visual Basic. Szablony języka Visual Basic można zainstalować jako pakiety NuGet. Szablony witryn sieci Web są instalowane w folderze głównym witryny w folderze o nazwie Microsoft Templates.

8 najlepszych porad dotyczących programowania

W tej sekcji wymieniono kilka wskazówek, które należy znać, gdy zaczniesz pisać kod serwera ASP.NET przy użyciu składni Razor.

1. Kod do strony dodaje się przy użyciu znaku @

Znak @ rozpoczyna wyrażenia śródwierszowe, bloki z pojedynczą instrukcją i bloki z wieloma instrukcjami:

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

Wynik wyświetlany w przeglądarce:

Razor-Img1

Porada

Kodowanie HTML

Podczas wyświetlania zawartości na stronie przy użyciu @ znaku, jak w poprzednich przykładach, ASP.NET koduje dane wyjściowe w formacie HTML. Zastępuje to zastrzeżone znaki HTML (takie jak < i i >&) kodami, które umożliwiają wyświetlanie znaków jako znaków na stronie internetowej zamiast interpretowania ich jako tagów HTML lub jednostek. Bez kodowania HTML dane wyjściowe z kodu serwera mogą nie być wyświetlane poprawnie i mogą uwidocznić stronę zagrożeń bezpieczeństwa.

Jeśli Twoim celem jest wyprowadzenie znaczników HTML, które renderuje tagi jako znaczniki (na przykład <p></p> akapit lub <em></em> podkreślenie tekstu), zobacz sekcję Łączenie tekstu, znaczników i kodu w blokach kodu w dalszej części tego artykułu.

Aby dowiedzieć się więcej na temat kodowania HTML , zobacz Praca z formularzami HTML w witrynach ASP.NET Web Pages.

2. Bloki kodu są ujęte w kod... Kod końcowy

Blok kodu zawiera co najmniej jedną instrukcję kodu i jest ujęta w słowa kluczowe Code i End Code. Umieść słowo kluczowe otwierające Code bezpośrednio po @ znaku — nie można między nimi umieścić odstępów.

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

Wynik wyświetlany w przeglądarce:

Razor-Img2

3. Wewnątrz bloku każda instrukcja kodu kończy się podziałem wiersza

W bloku kodu języka Visual Basic każda instrukcja kończy się podziałem wiersza. (W dalszej części artykułu zobaczysz sposób na zawijanie długiej instrukcji kodu do wielu wierszy w razie potrzeby).

<!-- 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. Zmienne są używane do przechowywania wartości

Wartości można przechowywać w zmiennej, w tym ciągi, liczby i daty itp. Tworzysz nową zmienną przy użyciu słowa kluczowego Dim . Wartości zmiennych można wstawić bezpośrednio na stronie przy użyciu polecenia @.

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

Wynik wyświetlany w przeglądarce:

Razor-Img3

5. Wartości ciągu literału należy ująć w znaki podwójnego cudzysłowu

Ciąg to sekwencja znaków, które są traktowane jako tekst. Aby określić ciąg, należy go ująć w znaki podwójnego cudzysłowu:

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

Aby osadzić znaki podwójnego cudzysłowu w wartości ciągu, wstaw dwa znaki podwójnego cudzysłowu. Jeśli chcesz, aby podwójny znak cudzysłowu był wyświetlany raz w danych wyjściowych strony, wprowadź go jako "" w cudzysłowie, a jeśli chcesz, aby był wyświetlany dwa razy, wprowadź go jako """" w cudzysłowie.

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

Wynik wyświetlany w przeglądarce:

Razor-Img4

6. W kodzie Visual Basic nie jest uwzględniana wielkość liter

W języku Visual Basic nie jest uwzględniana wielkość liter. Słowa kluczowe programowania (takie jak Dim, If, i ) i Truenazwy zmiennych (takie jak myString, lub subTotal) mogą być zapisywane w każdym przypadku.

Następujące wiersze kodu przypisują wartość do zmiennej lastname przy użyciu małej nazwy, a następnie wygenerują wartość zmiennej na stronie przy użyciu wielkiej nazwy.

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

Wynik wyświetlany w przeglądarce:

vb-syntax-5

7. Większość kodowania obejmuje pracę z obiektami

Obiekt reprezentuje coś, za pomocą którego można programować — stronę, pole tekstowe, plik, obraz, żądanie internetowe, wiadomość e-mail, rekord klienta (wiersz bazy danych) itp. Obiekty mają właściwości opisujące ich cechy — obiekt pola tekstowego ma Text właściwość, obiekt żądania ma Url właściwość, wiadomość e-mail ma From właściwość, a obiekt klienta ma FirstName właściwość . Obiekty mają również metody, które są "czasownikami", które mogą wykonywać. Przykłady obejmują metodę obiektu Save pliku, metodę obiektu Rotate obrazu i metodę obiektu Send poczty e-mail.

Często będziesz pracować z obiektem Request , który udostępnia informacje takie jak wartości pól formularza na stronie (pola tekstowe itp.), jakiego typu przeglądarka złożyła żądanie, adres URL strony, tożsamość użytkownika itp. W tym przykładzie pokazano, jak uzyskać dostęp do właściwości Request obiektu i jak wywołać MapPath metodę Request obiektu, która daje ścieżkę bezwzględną strony na serwerze:

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

Wynik wyświetlany w przeglądarce:

Razor-Img5

8. Możesz napisać kod, który podejmuje decyzje

Kluczową funkcją dynamicznych stron internetowych jest możliwość określenia, co należy zrobić na podstawie warunków. Najczęstszym sposobem wykonania tej czynności jest If instrukcja (i opcjonalna Else instrukcja).

@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 Instrukcja jest skróconym sposobem pisania If IsPost = True. Wraz z instrukcjami If istnieje wiele sposobów testowania warunków, powtarzania bloków kodu itd., które zostały opisane w dalszej części tego artykułu.

Wynik wyświetlany w przeglądarce (po kliknięciu przycisku Prześlij):

Razor-Img6

Porada

Metody HTTP GET i POST oraz właściwość IsPost

Protokół używany na stronach internetowych (HTTP) obsługuje bardzo ograniczoną liczbę metod ("czasowników"), które są używane do wykonywania żądań na serwerze. Dwa najczęściej używane są metody GET, które służą do odczytywania strony, i POST, która służy do przesyłania strony. Ogólnie rzecz biorąc, przy pierwszym żądaniu strony strona jest żądana przy użyciu metody GET. Jeśli użytkownik wypełni formularz, a następnie kliknie pozycję Prześlij, przeglądarka wysyła żądanie POST do serwera.

W programowaniu internetowym często warto wiedzieć, czy strona jest żądana jako get, czy post, aby wiedzieć, jak przetwarzać stronę. Na ASP.NET stronach sieci Web można użyć IsPost właściwości , aby sprawdzić, czy żądanie jest żądaniem GET, czy POST. Jeśli żądanie jest post, IsPost właściwość zwróci wartość true i możesz wykonywać takie czynności, jak odczytywanie wartości pól tekstowych w formularzu. Zobaczysz wiele przykładów pokazujących, jak przetwarzać stronę w różny sposób w zależności od wartości IsPost.

Prosty przykład kodu

Ta procedura pokazuje, jak utworzyć stronę, która ilustruje podstawowe techniki programowania. W tym przykładzie tworzysz stronę, która umożliwia użytkownikom wprowadzanie dwóch liczb, a następnie dodawanie ich i wyświetlanie wyniku.

  1. W edytorze utwórz nowy plik i nadaj mu nazwę AddNumbers.vbhtml.

  2. Skopiuj poniższy kod i znaczniki na stronę, zastępując wszystkie elementy już na stronie.

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

    Oto kilka rzeczy, które warto zwrócić uwagę:

    • Znak @ rozpoczyna pierwszy blok kodu na stronie i poprzedza zmienną osadzoną totalMessage w dolnej części.
    • Blok w górnej części strony jest ujęta w Code...End Codeelement .
    • Zmienne total, num1, num2i totalMessage przechowują kilka liczb i ciąg.
    • Wartość ciągu literału przypisana do zmiennej totalMessage jest w podwójnym cudzysłowie.
    • Ponieważ w kodzie Visual Basic nie jest uwzględniana wielkość liter, gdy totalMessage zmienna jest używana w dolnej części strony, jej nazwa musi być zgodna tylko z pisownią deklaracji zmiennej w górnej części strony. Wielkość liter nie ma znaczenia.
    • num1.AsInt() + num2.AsInt() Wyrażenie pokazuje, jak pracować z obiektami i metodami. Metoda AsInt dla każdej zmiennej konwertuje ciąg wprowadzony przez użytkownika na liczbę całkowitą (liczbę całkowitą), którą można dodać.
    • Tag <form> zawiera method="post" atrybut . Określa, że gdy użytkownik kliknie przycisk Dodaj, strona zostanie wysłana na serwer przy użyciu metody HTTP POST. Po przesłaniu strony kod If IsPost zwraca wartość true, a kod warunkowy jest uruchamiany, wyświetlając wynik dodawania liczb.
  3. Zapisz stronę i uruchom ją w przeglądarce. (Przed uruchomieniem strony upewnij się, że strona jest zaznaczona w obszarze roboczym Pliki ). Wprowadź dwie liczby całkowite, a następnie kliknij przycisk Dodaj .

    Razor-Img7

Język i składnia języka Visual Basic

Wcześniej przedstawiono podstawowy przykład tworzenia strony internetowej ASP.NET oraz sposobu dodawania kodu serwera do znaczników HTML. Tutaj poznasz podstawy używania języka Visual Basic do pisania kodu serwera ASP.NET przy użyciu składni Razor — czyli reguł języka programowania.

Jeśli masz doświadczenie z programowaniem (zwłaszcza jeśli korzystasz z języków C, C++, C#, Visual Basic lub JavaScript), większość informacji, które czytasz tutaj, będzie znana. Prawdopodobnie musisz zapoznać się tylko ze sposobem dodawania kodu WebMatrix do znaczników w plikach vbhtml .

Łączenie tekstu, znaczników i kodu w blokach kodu

W blokach kodu serwera często konieczne jest wyprowadzenie tekstu i narzutu na stronie. Jeśli blok kodu serwera zawiera tekst, który nie jest kodem i zamiast tego powinien być renderowany w taki sposób, ASP.NET musi być w stanie odróżnić ten tekst od kodu. Może to być realizowane na kilka sposobów.

  • Należy ująć tekst w element bloku HTML, taki jak <p></p> lub <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 może zawierać tekst, dodatkowe elementy HTML i wyrażenia kodu serwera. Gdy ASP.NET widzi otwierający tag HTML (na przykład <p>), renderuje wszystko, co element i jego zawartość, podobnie jak w przeglądarce (i rozpoznaje wyrażenia kodu serwera).

  • @: Użyj operatora lub <text> elementu . Dane @: wyjściowe zawierają pojedynczy wiersz zawartości zawierającej zwykły tekst lub niedopasowane tagi HTML; <text> element otacza wiele wierszy do danych wyjściowych. Te opcje są przydatne, gdy nie chcesz renderować elementu HTML jako części danych wyjściowych.

    @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
    

    Poniższy przykład powtarza poprzedni przykład, ale używa pojedynczej pary tagów <text> do wyrenderowania tekstu.

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

    W poniższym przykładzie <text> tagi i </text> zawierają trzy wiersze, z których wszystkie mają nieokreślony tekst i niedopasowane tagi HTML (<br />), wraz z kodem serwera i dopasowanymi tagami HTML. Ponownie można również poprzedzić każdy wiersz indywidualnie operatorem @: ; w obu sposób działa.

    @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
    

    Uwaga

    Gdy dane wyjściowe są wyświetlane w tej sekcji — przy użyciu elementu HTML, @: operatora lub <text> elementu — ASP.NET nie koduje danych wyjściowych w formacie HTML. (Jak wspomniano wcześniej, ASP.NET koduje dane wyjściowe wyrażeń kodu serwera i bloków kodu serwera, które są poprzedzone znakiem @, z wyjątkiem przypadków specjalnych zanotowanych w tej sekcji).

Białe znaki

Dodatkowe spacje w instrukcji (i poza literałem ciągu) nie mają wpływu na instrukcję :

@Code Dim personName =    "Smith"    End Code

Podział długich instrukcji na wiele wierszy

Długą instrukcję kodu można podzielić na wiele wierszy, używając znaku _ podkreślenia (który w języku Visual Basic jest nazywany znakiem kontynuacji) po każdym wierszu kodu. Aby przerwać instrukcję w następnym wierszu, na końcu wiersza dodaj spację, a następnie znak kontynuacji. Kontynuuj instrukcję w następnym wierszu. Instrukcje można zawijać na dowolną liczbę wierszy, co trzeba poprawić czytelność. Następujące instrukcje są takie same:

@Code
    Dim familyName _
    =  "Smith" 
End Code

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

Nie można jednak opakowywać linii w środku literału ciągu. Poniższy przykład nie działa:

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

Aby połączyć długi ciąg, który zawija się do wielu wierszy, takich jak powyższy kod, należy użyć operatora łączenia (&), który zostanie wyświetlony w dalszej części tego artykułu.

Komentarze kodu

Komentarze umożliwiają pozostawienie notatek dla siebie lub innych osób. Komentarze składni Razor mają prefiks @* i kończą się ciągiem *@.

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

W blokach kodu można użyć komentarzy składni Razor lub użyć zwykłego znaku komentarza języka Visual Basic, który jest pojedynczym cudzysłowem (') poprzedzonym każdym wierszem.

@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

Zmienne

Zmienna jest nazwanym obiektem używanym do przechowywania danych. Zmienne można nazwać niczym, ale nazwa musi zaczynać się od znaku alfabetycznego i nie może zawierać białych znaków ani znaków zarezerwowanych. W języku Visual Basic, jak pokazano wcześniej, wielkość liter w nazwie zmiennej nie ma znaczenia.

Zmienne i typy danych

Zmienna może mieć określony typ danych, który wskazuje, jakiego rodzaju dane są przechowywane w zmiennej. Możesz mieć zmienne ciągu, które przechowują wartości ciągu (takie jak "Hello world"), zmienne całkowite przechowujące wartości liczb całkowitych (na przykład 3 lub 79) oraz zmienne daty przechowujące wartości dat w różnych formatach (na przykład 12.04.2012 lub marzec 2009 r.). Istnieje również wiele innych typów danych, których można użyć.

Nie trzeba jednak określać typu zmiennej. W większości przypadków ASP.NET może ustalić typ na podstawie sposobu użycia danych w zmiennej. (Czasami musisz określić typ; zobaczysz przykłady, w których jest to prawda).

Aby zadeklarować zmienną bez określania typu, użyj znaku Dim plus nazwy zmiennej (na przykład Dim myVar). Aby zadeklarować zmienną o typie, użyj znaku Dim plus nazwy zmiennej, a następnie As nazwy typu (na przykład 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

W poniższym przykładzie pokazano kilka wyrażeń wbudowanych, które używają zmiennych na stronie internetowej.

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

Wynik wyświetlany w przeglądarce:

Razor-Img9

Konwertowanie i testowanie typów danych

Chociaż ASP.NET zwykle mogą automatycznie określić typ danych, czasami nie może. W związku z tym może być konieczne ułatwienie ASP.NET przez przeprowadzenie jawnej konwersji. Nawet jeśli nie musisz konwertować typów, czasami warto sprawdzić, z jakim typem danych możesz pracować.

Najczęstszym przypadkiem jest to, że musisz przekonwertować ciąg na inny typ, taki jak liczba całkowita lub data. W poniższym przykładzie pokazano typowy przypadek, w którym należy przekonwertować ciąg na liczbę.

@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

Z reguły dane wejściowe użytkownika są dostarczane jako ciągi. Nawet jeśli zostanie wyświetlony monit o wprowadzenie liczby, a nawet jeśli wprowadzili cyfrę, po przesłaniu danych wejściowych użytkownika i odczytaniu ich w kodzie dane są w formacie ciągu. W związku z tym należy przekonwertować ciąg na liczbę. Jeśli w przykładzie spróbujesz wykonać operację arytmetyczną na wartości bez ich konwertowania, następujące wyniki błędu, ponieważ ASP.NET nie może dodać dwóch ciągów:

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

Aby przekonwertować wartości na liczby całkowite, należy wywołać metodę AsInt . Jeśli konwersja zakończy się pomyślnie, możesz dodać liczby.

W poniższej tabeli wymieniono niektóre typowe metody konwersji i testowania zmiennych.

Metoda

Opis

Przykład


AsInt(), IsInt()

Konwertuje ciąg reprezentujący liczbę całkowitą (na przykład "593") na liczbę całkowitą.

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

AsBool(), IsBool()

Konwertuje ciąg, taki jak "true" lub "false" na typ logiczny.

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

AsFloat(), IsFloat()

Konwertuje ciąg, który ma wartość dziesiętną, na przykład "1.3" lub "7,439" na liczbę zmiennoprzecinkową.

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

AsDecimal(), IsDecimal()

Konwertuje ciąg, który ma wartość dziesiętną, na przykład "1.3" lub "7.439" na liczbę dziesiętną. (W ASP.NET liczba dziesiętna jest bardziej precyzyjna niż liczba zmiennoprzecinkowa).

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

AsDateTime(), IsDateTime()

Konwertuje ciąg reprezentujący wartość daty i godziny na typ ASP.NET DateTime .

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

ToString()

Konwertuje dowolny inny typ danych na ciąg.

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

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

Operatory

Operator to słowo kluczowe lub znak, który informuje ASP.NET, jakiego rodzaju polecenie należy wykonać w wyrażeniu. Język Visual Basic obsługuje wiele operatorów, ale wystarczy rozpoznać kilka, aby rozpocząć tworzenie ASP.NET stron internetowych. Poniższa tabela zawiera podsumowanie najpopularniejszych operatorów.

Operator

Opis

Przykłady


+ - * /

Operatory matematyczne używane w wyrażeniach liczbowych.

@(5 + 13)

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

=

Przypisywanie i równość. W zależności od kontekstu wartość po prawej stronie instrukcji jest przypisywana do obiektu po lewej stronie lub sprawdza wartości równości.

Dim age = 17

Dim income = Request("AnnualIncome")

<>

Nierówności. Zwraca wartość True , jeśli wartości nie są równe.

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

< > <= >=

Mniejsze niż, większe niż, mniejsze lub równe i większe niż lub równe.

If 2 < 3 Then
    ' Do something.
End If

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

&

Łączenie, które służy do łączenia ciągów.

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

+= -=

Operatory inkrementacji i dekrementacji, które dodają i odejmą 1 (odpowiednio) ze zmiennej.

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

.

Dot. Służy do rozróżniania obiektów i ich właściwości i metod.

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

()

Nawiasy. Służy do grupowania wyrażeń, przekazywania parametrów do metod oraz uzyskiwania dostępu do elementów członkowskich tablic i kolekcji.

@(3 + 7)

@Request.MapPath(Request.FilePath)

Not

Nie jesteś. Odwraca wartość true na wartość false i odwrotnie. Zazwyczaj używany jako skrócony sposób testowania dla False (czyli nie True).

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

AndAlso OrElse

Logiczne AND i OR, które są używane do łączenia warunków razem.

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

Praca ze ścieżkami plików i folderów w kodzie

Często będziesz pracować ze ścieżkami plików i folderów w kodzie. Oto przykład fizycznej struktury folderów witryny internetowej, która może pojawić się na komputerze dewelopera:

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

Oto kilka podstawowych szczegółów dotyczących adresów URL i ścieżek:

  • Adres URL zaczyna się od nazwy domeny (http://www.example.com) lub nazwy serwera (http://localhost, http://mycomputer).
  • Adres URL odpowiada ścieżce fizycznej na komputerze hosta. Na przykład http://myserver może odpowiadać folderowi C:\websites\mywebsite na serwerze.
  • Ścieżka wirtualna jest skrócona do reprezentowania ścieżek w kodzie bez konieczności określania pełnej ścieżki. Zawiera on część adresu URL, która jest zgodna z nazwą domeny lub serwera. Jeśli używasz ścieżek wirtualnych, możesz przenieść kod do innej domeny lub serwera bez konieczności aktualizowania ścieżek.

Oto przykład ułatwiający zrozumienie różnic:

Pełny adres URL http://mycompanyserver/humanresources/CompanyPolicy.htm
Nazwa serwera mycompanyserver
Ścieżka wirtualna /humanresources/CompanyPolicy.htm
Ścieżka fizyczna C:\mywebsites\humanresources\CompanyPolicy.htm

Wirtualny katalog główny to /, podobnie jak katalog główny dysku C: to . (Ścieżki folderów wirtualnych zawsze używają ukośników do przodu). Ścieżka wirtualna folderu nie musi mieć takiej samej nazwy jak folder fizyczny; może to być alias. (Na serwerach produkcyjnych ścieżka wirtualna rzadko pasuje do dokładnej ścieżki fizycznej).

Podczas pracy z plikami i folderami w kodzie czasami trzeba odwoływać się do ścieżki fizycznej, a czasami ścieżki wirtualnej, w zależności od obiektów, z którymi pracujesz. ASP.NET udostępnia te narzędzia do pracy ze ścieżkami plików i folderów w kodzie: Server.MapPath metoda oraz operator i ~Href metoda.

Konwertowanie ścieżek wirtualnych na ścieżki fizyczne: metoda Server.MapPath

Metoda Server.MapPath konwertuje ścieżkę wirtualną (na przykład /default.cshtml) na bezwzględną ścieżkę fizyczną (na przykład C:\WebSites\MyWebSiteFolder\default.cshtml). Ta metoda jest używana za każdym razem, gdy potrzebujesz pełnej ścieżki fizycznej. Typowym przykładem jest odczytywanie lub zapisywanie pliku tekstowego lub pliku obrazu na serwerze internetowym.

Zazwyczaj nie wiesz bezwzględnej ścieżki fizycznej witryny na serwerze witryny hostingu, więc ta metoda może przekonwertować ścieżkę, którą znasz — ścieżkę wirtualną — do odpowiedniej ścieżki na serwerze. Ścieżka wirtualna jest przekazywana do pliku lub folderu do metody i zwraca ścieżkę fizyczną:

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

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

Odwoływanie się do wirtualnego katalogu głównego: operator ~ i metoda Href

W pliku cshtml lub vbhtml można odwoływać się do wirtualnej ścieżki głównej ~ przy użyciu operatora . Jest to bardzo przydatne, ponieważ można przenosić strony w witrynie, a wszystkie linki zawarte na innych stronach nie zostaną przerwane. Jest to również przydatne, jeśli kiedykolwiek przeniesiesz witrynę internetową do innej lokalizacji. Oto kilka przykładów:

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

Jeśli witryna internetowa to http://myserver/myapp, poniżej przedstawiono sposób ASP.NET traktować te ścieżki po uruchomieniu strony:

  • myImagesFolder: http://myserver/myapp/images
  • myStyleSheet : http://myserver/myapp/styles/Stylesheet.css

(Te ścieżki nie będą w rzeczywistości widoczne jako wartości zmiennej, ale ASP.NET będą traktować ścieżki tak, jakby były.

Możesz użyć ~ operatora zarówno w kodzie serwera (jak powyżej) i w znacznikach, w następujący sposób:

<!-- Examples of using the ~ operator in markup in ASP.NET Web Pages -->

<a href="~/Default">Home</a>
<img src="~/images/MyImages.png" />

W znacznikach ~ używasz operatora do tworzenia ścieżek do zasobów, takich jak pliki obrazów, inne strony internetowe i pliki CSS. Po uruchomieniu strony ASP.NET przegląda stronę (kod i znaczniki) i rozpoznaje wszystkie ~ odwołania do odpowiedniej ścieżki.

Logika warunkowa i pętle

ASP.NET kod serwera umożliwia wykonywanie zadań na podstawie warunków i pisanie kodu, który powtarza instrukcje określoną liczbę razy, czyli kod, który uruchamia pętlę).

Warunki testowania

Aby przetestować prosty warunek, należy użyć instrukcji If...Then , która zwraca True lub False na podstawie określonego testu:

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

Słowo If kluczowe uruchamia blok. Rzeczywisty test (warunek) jest zgodny ze If słowem kluczowym i zwraca wartość true lub false. Instrukcja If kończy się ciągiem Then. Instrukcje, które zostaną uruchomione, jeśli test ma wartość true, są ujęte w element If i End If. Instrukcja If może zawierać Else blok określający instrukcje do uruchomienia, jeśli warunek ma wartość false:

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

If Jeśli instrukcja uruchamia blok kodu, nie musisz używać normalnych Code...End Code instrukcji do uwzględnienia bloków. Możesz po prostu dodać @ do bloku i będzie działać. Takie podejście działa z innymi słowami kluczowymi If programowania Visual Basic, po których następują bloki kodu, w tym For, For Each, Do Whileitp.

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

Można dodać wiele warunków przy użyciu co najmniej jednego ElseIf bloku:

@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

W tym przykładzie, jeśli pierwszy warunek w If bloku nie jest spełniony, ElseIf warunek jest sprawdzany. Jeśli ten warunek zostanie spełniony, instrukcje w ElseIf bloku zostaną wykonane. Jeśli żaden z warunków nie zostanie spełniony, instrukcje w Else bloku są wykonywane. Możesz dodać dowolną Else liczbę blokówElseIf, a następnie zamknąć blok jako warunek "wszystko inne".

Aby przetestować dużą liczbę warunków, użyj Select Case bloku:

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

Wartość do przetestowania znajduje się w nawiasach (w przykładzie zmienna dzień tygodnia). Każdy pojedynczy test używa Case instrukcji zawierającej wartość. Jeśli wartość instrukcji jest zgodna z Case wartością testu, zostanie wykonany kod w tym Case bloku.

Wynik ostatnich dwóch bloków warunkowych wyświetlanych w przeglądarce:

Razor-Img10

Kod pętli

Często trzeba wielokrotnie uruchamiać te same instrukcje. W tym celu należy wykonać pętlę. Na przykład często uruchamiasz te same instrukcje dla każdego elementu w kolekcji danych. Jeśli wiesz dokładnie, ile razy chcesz pętli, możesz użyć For pętli. Ten rodzaj pętli jest szczególnie przydatny do zliczania w górę lub odliczania:

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

Pętla zaczyna się od słowa kluczowego For , po którym następują trzy elementy:

  • Natychmiast po instrukcji For zadeklarujesz zmienną licznika (nie musisz jej używać Dim), a następnie wskażesz zakres, tak jak w i = 10 to 20pliku . Oznacza to, że zmienna i zacznie liczyć na 10 i będzie kontynuowana do momentu osiągnięcia 20 (włącznie).
  • For Między instrukcjami i Next jest zawartość bloku. Może to zawierać co najmniej jedną instrukcję kodu wykonywaną za pomocą każdej pętli.
  • Instrukcja Next i kończy pętlę. Zwiększa licznik i uruchamia następną iterację pętli.

Wiersz kodu między wierszami For i Next zawiera kod uruchamiany dla każdej iteracji pętli. Znacznik tworzy nowy akapit (<p> element) za każdym razem i dodaje wiersz do danych wyjściowych, wyświetlając wartość i (licznik). Po uruchomieniu tej strony przykład tworzy 11 wierszy wyświetlających dane wyjściowe z tekstem w każdym wierszu wskazującym numer elementu.

Razor-Img11

Jeśli pracujesz z kolekcją lub tablicą, często używasz For Each pętli. Kolekcja jest grupą podobnych obiektów, a For Each pętla umożliwia wykonywanie zadania na każdym elemencie w kolekcji. Ten typ pętli jest wygodny dla kolekcji, ponieważ w przeciwieństwie For do pętli nie trzeba zwiększać licznika ani ustawiać limitu. For Each Zamiast tego kod pętli po prostu przechodzi przez kolekcję do momentu zakończenia.

W tym przykładzie Request.ServerVariables zwracane są elementy w kolekcji (zawierające informacje o serwerze internetowym). Używa For Each pętli do wyświetlania nazwy każdego elementu przez utworzenie nowego <li> elementu na liście punktowanej HTML.

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

Po For Each słowie kluczowym następuje zmienna reprezentująca pojedynczy element w kolekcji (w przykładzie myItem), a następnie słowo kluczowe, po którym In następuje kolekcja, którą chcesz przełączyć w pętlę. W treści pętli można uzyskać dostęp do bieżącego For Each elementu przy użyciu zmiennej zadeklarowanej wcześniej.

Razor-Img12

Aby utworzyć bardziej ogólną pętlę przeznaczenia, użyj instrukcji Do While :

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

Ta pętla zaczyna się od słowa kluczowego Do While , po którym następuje warunek, po którym następuje powtórzenie bloku. Pętle zwykle przyrostowe (dodawanie do) lub dekrementacja (odejmowanie) zmiennej lub obiektu używanego do zliczania. W tym przykładzie += operator dodaje 1 do wartości zmiennej przy każdym uruchomieniu pętli. (Aby zdekrementować zmienną w pętli, która odlicza się, należy użyć operatora -=dekrementacji ).

Obiekty i kolekcje

Prawie wszystko w witrynie internetowej ASP.NET jest obiektem, w tym samą stroną internetową. W tej sekcji omówiono niektóre ważne obiekty, z których będziesz pracować często w kodzie.

Obiekty strony

Najbardziej podstawowym obiektem w ASP.NET jest strona. Możesz uzyskać dostęp do właściwości obiektu strony bezpośrednio bez żadnego obiektu kwalifikującego. Poniższy kod pobiera ścieżkę pliku strony przy użyciu Request obiektu strony:

@Code
    Dim path = Request.FilePath
End Code

Możesz użyć właściwości Page obiektu, aby uzyskać wiele informacji, takich jak:

  • Request. Jak już wiesz, jest to zbiór informacji o bieżącym żądaniu, w tym o tym, jakiego typu przeglądarka złożyła żądanie, adres URL strony, tożsamość użytkownika itp.

  • Response. Jest to zbiór informacji o odpowiedzi (stronie), które zostaną wysłane do przeglądarki po zakończeniu działania kodu serwera. Można na przykład użyć tej właściwości do zapisania informacji w odpowiedzi.

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

Obiekty kolekcji (tablice i słowniki)

Kolekcja jest grupą obiektów tego samego typu, takich jak kolekcja Customer obiektów z bazy danych. ASP.NET zawiera wiele wbudowanych kolekcji, takich jak Request.Files kolekcja.

Często będziesz pracować z danymi w kolekcjach. Dwa typowe typy kolekcji to tablica i słownik. Tablica jest przydatna, gdy chcesz przechowywać kolekcję podobnych elementów, ale nie chcesz tworzyć oddzielnej zmiennej do przechowywania każdego elementu:

<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

W przypadku tablic deklarujesz określony typ danych, taki jak String, Integerlub DateTime. Aby wskazać, że zmienna może zawierać tablicę, należy dodać nawiasy do nazwy zmiennej w deklaracji (na przykład Dim myVar() As String). Dostęp do elementów w tablicy można uzyskać przy użyciu ich pozycji (indeksu) lub instrukcji For Each . Indeksy tablic są oparte na zera — czyli pierwszy element znajduje się na pozycji 0, drugi element znajduje się na pozycji 1 itd.

@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

Liczbę elementów w tablicy można określić, uzyskując jej Length właściwość. Aby uzyskać pozycję określonego elementu w tablicy (czyli w celu przeszukania tablicy), użyj Array.IndexOf metody . Można również wykonywać takie czynności, jak odwrócenie zawartości tablicy ( Array.Reverse metody) lub sortowanie zawartości ( Array.Sort metoda).

Dane wyjściowe kodu tablicy ciągów wyświetlane w przeglądarce:

Razor-Img13

Słownik jest kolekcją par klucz/wartość, w której należy podać klucz (lub nazwę), aby ustawić lub pobrać odpowiednią wartość:

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

Aby utworzyć słownik, użyj słowa kluczowego New , aby wskazać, że tworzysz nowy Dictionary obiekt. Słownik można przypisać do zmiennej przy użyciu słowa kluczowego Dim . Wskazujesz typy danych elementów w słowniku przy użyciu nawiasów ( ( ) ). Na końcu deklaracji należy dodać kolejną parę nawiasów, ponieważ jest to metoda, która tworzy nowy słownik.

Aby dodać elementy do słownika, możesz wywołać Add metodę zmiennej słownika (myScores w tym przypadku), a następnie określić klucz i wartość. Alternatywnie można użyć nawiasów, aby wskazać klucz i wykonać proste przypisanie, jak w poniższym przykładzie:

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

Aby uzyskać wartość ze słownika, należy określić klucz w nawiasach:

@myScores("test4")

Wywoływanie metod z parametrami

Jak pokazano wcześniej w tym artykule, obiekty, które programujesz z metodami. Na przykład Database obiekt może mieć metodę Database.Connect . Wiele metod ma również jeden lub więcej parametrów. Parametr jest wartością przekazywaną do metody, aby umożliwić metodzie ukończenie zadania. Na przykład przyjrzyj się deklaracji Request.MapPath metody , która przyjmuje trzy parametry:

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

Ta metoda zwraca ścieżkę fizyczną na serwerze, który odpowiada określonej ścieżce wirtualnej. Trzy parametry metody to virtualPath, baseVirtualDiri allowCrossAppMapping. (Zwróć uwagę, że w deklaracji parametry są wyświetlane z typami danych, które zaakceptują). Po wywołaniu tej metody należy podać wartości dla wszystkich trzech parametrów.

W przypadku korzystania z języka Visual Basic ze składnią Razor dostępne są dwie opcje przekazywania parametrów do metody: parametry pozycyjne lub nazwane parametry. Aby wywołać metodę przy użyciu parametrów pozycyjnych, należy przekazać parametry w ścisłej kolejności określonej w deklaracji metody. (Zwykle znasz tę kolejność, czytając dokumentację metody). Musisz postępować zgodnie z kolejnością i nie można pominąć żadnego z parametrów — w razie potrzeby należy przekazać pusty ciąg ("") lub wartość null dla parametru pozycyjnego, dla którego nie masz wartości.

W poniższym przykładzie założono, że masz folder o nazwie scripts w witrynie internetowej. Kod wywołuje metodę Request.MapPath i przekazuje wartości dla trzech parametrów w prawidłowej kolejności. Następnie zostanie wyświetlona wynikowa zamapowana ścieżka.

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

Jeśli istnieje wiele parametrów metody, można zachować czytelność kodu i bardziej czytelne przy użyciu nazwanych parametrów. Aby wywołać metodę przy użyciu nazwanych parametrów, określ nazwę parametru, po której następuje := , a następnie podaj wartość. Zaletą nazwanych parametrów jest możliwość dodania ich w dowolnej kolejności. (Wadą jest to, że wywołanie metody nie jest tak kompaktowe).

Poniższy przykład wywołuje tę samą metodę co powyżej, ale używa nazwanych parametrów do podania wartości:

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

Jak widać, parametry są przekazywane w innej kolejności. Jeśli jednak uruchomisz poprzedni przykład i ten przykład, zwróci tę samą wartość.

Obsługa błędów

instrukcje Try-Catch

Często będziesz mieć instrukcje w kodzie, które mogą zakończyć się niepowodzeniem z powodów spoza kontroli. Na przykład:

  • Jeśli kod próbuje otworzyć, utworzyć, odczytać lub napisać plik, mogą wystąpić różnego rodzaju błędy. Żądany plik może nie istnieć, może być zablokowany, kod może nie mieć uprawnień itd.
  • Podobnie, jeśli kod próbuje zaktualizować rekordy w bazie danych, mogą wystąpić problemy z uprawnieniami, połączenie z bazą danych może zostać usunięte, dane do zapisania mogą być nieprawidłowe i tak dalej.

W kategoriach programowania te sytuacje są nazywane wyjątkami. Jeśli kod napotka wyjątek, generuje (zgłasza) komunikat o błędzie, który jest w najlepszym razie irytujący dla użytkowników.

Razor-Img14

W sytuacjach, w których kod może napotkać wyjątki, i aby uniknąć komunikatów o błędach tego typu, można użyć Try/Catch instrukcji. W instrukcji Try uruchomisz sprawdzany kod. W co najmniej Catch jednej instrukcji można wyszukać określone błędy (określone typy wyjątków), które mogły wystąpić. Możesz uwzględnić dowolną liczbę Catch instrukcji, aby wyszukać przewidywane błędy.

Uwaga

Zalecamy unikanie używania Response.Redirect metody w Try/Catch instrukcjach, ponieważ może to spowodować wyjątek na stronie.

Poniższy przykład przedstawia stronę, która tworzy plik tekstowy w pierwszym żądaniu, a następnie wyświetla przycisk umożliwiający użytkownikowi otwarcie pliku. W przykładzie celowo użyto nieprawidłowej nazwy pliku, aby spowodować wyjątek. Kod zawiera Catch instrukcje dla dwóch możliwych wyjątków: FileNotFoundException, który występuje, jeśli nazwa pliku jest nieprawidłowa, i DirectoryNotFoundException, co występuje, jeśli ASP.NET nie może nawet odnaleźć folderu. (Instrukcję można usunąć z komentarza w przykładzie, aby zobaczyć, jak działa, gdy wszystko działa prawidłowo).

Jeśli kod nie obsłużył wyjątku, zostanie wyświetlona strona błędu podobna do poprzedniego zrzutu ekranu. Try/Catch Jednak sekcja pomaga uniemożliwić użytkownikowi wyświetlanie tego typu błędów.

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

Dodatkowe zasoby

Dokumentacja referencyjna