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

Autor FitzMacken

Ten artykuł zawiera omówienie programowania za pomocą ASP.NET stron sieci Web przy użyciu składnia Razor i Visual Basic. ASP.NET to technologia firmy Microsoft do uruchamiania dynamicznych stron sieci Web na serwerach sieci Web.

Dowiesz się:

  • 8 najważniejszych porad programistycznych dotyczących rozpoczynania pracy z programowaniem ASP.NET stron sieci Web przy użyciu programu składnia Razor.
  • Podstawowe pojęcia związane z programowaniem, które będą potrzebne.
  • Co to jest kod serwera ASP.NET i składnia Razor.

Wersje oprogramowania

  • ASP.NET strony sieci Web (Razor) 3

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

Większość przykładów używania stron sieci Web ASP.NET z użyciem C#składnia Razor. Jednak składnia Razor obsługuje również Visual Basic. Aby program ASP.NET stronę sieci Web w Visual Basic, należy utworzyć stronę sieci Web z rozszerzeniem nazwy pliku . vbhtml , a następnie dodać kod Visual Basic. Ten artykuł zawiera omówienie pracy z Visual Basic językiem i składnią w celu tworzenia stron sieci Web ASP.NET.

Note

Domyślne szablony witryn sieci Web dla programu Microsoft WebMatrix (piekarni, Photo Galleryi Starter siteitp.) są dostępne w C# systemach i Visual Basic. Szablony Visual Basic można zainstalować za pomocą programu jako pakietów NuGet. Szablony witryn sieci Web są instalowane w folderze głównym witryny w folderze o nazwie Szablony firmy Microsoft.

8 najważniejszych wskazówek dotyczących programowania

W tej sekcji przedstawiono kilka wskazówek, które należy znać podczas pisania kodu serwera ASP.NET przy użyciu składnia Razor.

1. Dodaj kod do strony przy użyciu znaku @

Znak @ uruchamia wyrażenia śródwierszowe, bloki pojedynczej instrukcji i bloki zawierające wiele instrukcji:

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

Tip

Kodowanie HTML

Gdy wyświetlasz zawartość na stronie przy użyciu znaku @, jak w powyższych przykładach, ASP.NET HTML — koduje dane wyjściowe. 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 sieci Web zamiast interpretowania ich jako tagów HTML lub jednostek. Bez kodowania HTML dane wyjściowe z kodu serwera mogą nie być wyświetlane prawidłowo i mogą uwidaczniać zagrożenie bezpieczeństwa.

Jeśli celem jest wyprowadzanie kodu HTML, który renderuje Tagi jako znaczniki (na przykład <p></p> akapitu lub <em></em> w celu wyróżnienia tekstu), zobacz sekcję łączenie tekstu, znaczników i kodu w blokach kodu w dalszej części tego artykułu.

Więcej informacji na temat kodowania HTML można znaleźć w artykule Praca z formularzami HTML w witrynach ASP.NET Web Pages.

2. bloki kodu zostały ujęte w kodzie... Kod końcowy

Blok kodu zawiera jedną lub więcej instrukcji kodu i jest ujęty w słowa kluczowe Code i End Code. Umieść otwierający Code słowo kluczowe bezpośrednio po znaku — @ nie może być odstęp między nimi.

<!-- 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 można zakończyć każdą instrukcję Code z podziałem wiersza

W bloku kodu Visual Basic każda instrukcja zostaje zakończona podziałem wiersza. (W dalszej części artykułu zobaczysz sposób zawijania 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. Użyj zmiennych do przechowywania wartości

Można przechowywać wartości w zmiennej, w tym ciągi, liczby i daty itp. Tworzysz nową zmienną za pomocą słowa kluczowego Dim. Można wstawiać wartości zmiennych bezpośrednio na stronie przy użyciu @.

<!-- 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. w podwójnym cudzysłowie należy umieścić wartości ciągu literału

Ciąg jest sekwencją znaków, które są traktowane jako tekst. Aby określić ciąg, należy umieścić go w podwójnym cudzysłowie:

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

Aby osadzić znaki podwójnego cudzysłowu w ciągu wartości ciągu, Wstaw dwa znaki podwójnego cudzysłowu. Jeśli chcesz, aby znak podwójnego cudzysłowu pojawił się raz w danych wyjściowych na stronie, wprowadź go jako "" w ciągu ujętym w cudzysłów, a jeśli chcesz, aby pojawił się dwukrotnie, wprowadź go jako """" w ciągu ujętym w cudzysłów.

<!-- 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. kod Visual Basic nie uwzględnia wielkości liter

W języku Visual Basic nie jest rozróżniana wielkość liter. W każdym przypadku można napisać słowa kluczowe programowania (takie jak Dim, Ifi True) oraz nazwy zmiennych (takie jak myStringlub subTotal).

Następujące wiersze kodu przypisują wartość do zmiennej lastname przy użyciu nazwy z małymi literami, a następnie wyprowadza wartość zmiennej na stronę przy użyciu nazwy z wielką literą.

@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 element, który można zaprogramować ze — stroną, polem tekstowym, plikiem, obrazem, żądaniem sieci Web, wiadomością e-mail, rekordem klienta (wierszem bazy danych) itd. Obiekty mają właściwości opisujące ich właściwości — obiekt pola tekstowego ma właściwość Text, obiekt żądania ma właściwość Url, wiadomość e-mail ma właściwość From, a obiekt klienta ma właściwość FirstName. Obiekty mają również metody, które są zleceniami "," mogą być wykonywane. Przykłady obejmują metodę Save obiektu pliku, metodę Rotate obiektu obrazu oraz metodę Send obiektu poczty e-mail.

Często pracujesz z obiektem Request, który zawiera informacje, takie jak wartości pól formularza na stronie (pola tekstowe itd.), typ przeglądarki, która złożyła żądanie, adres URL strony, tożsamość użytkownika itd. Ten przykład pokazuje, jak uzyskać dostęp do właściwości obiektu Request i jak wywołać metodę MapPath obiektu Request, która zapewnia ś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ą cechą dynamicznych stron sieci Web jest określenie, jakie czynności należy wykonać na podstawie warunków. Najbardziej typowym sposobem wykonania tej czynności jest wykonanie instrukcji If (i opcjonalnej instrukcji Else).

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

Instrukcja If IsPost to skrócony sposób pisania If IsPost = True. Wraz z If instrukcjami istnieją różne sposoby testowania warunków, powtarzania bloków kodu i tak dalej, które opisano w dalszej części tego artykułu.

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

Razor-Img6

Tip

Metody GET i POST protokołu HTTP oraz Właściwość ispost

Protokół używany przez strony sieci Web (HTTP) obsługuje bardzo ograniczoną liczbę metod ("czasownik"), które są używane do żądania do serwera. Dwa Najczęstsze są pobieranie, które są używane do odczytywania strony i wpisu, które są używane do przesyłania strony. Na ogół podczas pierwszego żądania strony użytkownik żąda strony przy użyciu polecenia GET. Jeśli użytkownik wypełni formularz, a następnie kliknie przycisk Prześlij, przeglądarka wysyła żądanie post do serwera.

W programowaniu sieci Web często warto wiedzieć, czy strona jest żądana jako GET, czy jako wpis, aby poznać sposób przetwarzania strony. Na stronach sieci Web ASP.NET można użyć właściwości IsPost, aby sprawdzić, czy żądanie jest GET lub POST. Jeśli żądanie jest WPISem, właściwość IsPost zwróci wartość true i można wykonać czynności, takie jak odczytywanie wartości pól tekstowych w formularzu. Wiele przykładów zobaczysz, 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ę przedstawiającą podstawowe techniki programowania. W tym przykładzie utworzysz stronę umożliwiającą użytkownikom wprowadzanie dwóch liczb, a następnie ich dodanie i wyświetlenie wyniku.

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

  2. Skopiuj poniższy kod i adiustację na stronie, zastępując wszystkie elementy znajdujące się 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, dla których warto zwrócić uwagę:

    • Znak @ uruchamia pierwszy blok kodu na stronie i poprzedza zmienną totalMessage osadzoną w dolnej części.
    • Blok w górnej części strony jest ujęty w Code...End Code.
    • Zmienne total, num1, num2i totalMessage przechowują kilka liczb i ciąg.
    • Wartość ciągu literału przypisana do zmiennej totalMessage znajduje się w podwójnym cudzysłowie.
    • Ponieważ w kodzie Visual Basic nie jest rozróżniana wielkość liter, gdy zmienna totalMessage jest używana w dolnej części strony, jej nazwa musi być zgodna z pisownią deklaracji zmiennej w górnej części strony. Wielkość liter nie ma znaczenia.
    • Wyrażenie num1.AsInt() + num2.AsInt() pokazuje, jak korzystać z obiektów i metod. 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 atrybut method="post". Oznacza to, że gdy użytkownik kliknie przycisk Dodaj, Strona zostanie wysłana na serwer przy użyciu metody POST protokołu HTTP. Gdy strona zostanie przesłana, kod If IsPost ma wartość true, a kod warunkowy zostanie uruchomiony, wyświetlając wynik dodawania liczb.
  3. Zapisz stronę i uruchom ją w przeglądarce. (Upewnij się, że strona została wybrana w obszarze roboczym pliki przed jej uruchomieniem). Wprowadź dwie liczby całkowite, a następnie kliknij przycisk Dodaj .

    Razor-Img7

Visual Basic język i składnia

Wcześniej przedstawiono podstawowy przykład tworzenia strony sieci Web ASP.NET oraz sposób dodawania kodu serwerowego do znacznika HTML. W tym artykule poznasz podstawy używania Visual Basic do pisania kodu serwera ASP.NET przy użyciu składnia Razor — , które są regułami języka programowania.

Jeśli masz doświadczenie z programowaniem (zwłaszcza jeśli użyto języka C, C++, C#, Visual Basic lub JavaScript), większość czytanych tutaj informacji będzie znana. Prawdopodobnie trzeba będzie zaznajomić się tylko z informacjami o sposobie dodawania kodu WebMatrix do znaczników w plikach . vbhtml .

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

W blokach kodu serwera często chcesz, aby tekst i adiustacje były wyprowadzane na stronie. Jeśli blok kodu serwera zawiera tekst, który nie jest kodem, a zamiast tego powinien być renderowany jako, ASP.NET musi mieć możliwość odróżnienia tego tekstu od kodu. Istnieje kilka sposobów, aby to zrobić.

  • Ujmij 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 tag otwierającego HTML (na przykład <p>), renderuje wszystko element i jego zawartość jako plik przeglądarki (i rozwiązuje wyrażenie kodu serwera).

  • Użyj operatora @: lub elementu <text>. @: wyprowadza pojedynczy wiersz zawartości zawierający zwykły tekst lub niedopasowane Tagi HTML; element <text> obejmuje 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>, aby umieścić tekst do renderowania.

    @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 Tagi <text> i </text> zawierają trzy wiersze, z których wszystkie mają niezwierany tekst i niedopasowane Tagi HTML (<br />), a także kod serwera i dopasowane Tagi HTML. Ponownie można także poprzedzać każdy wiersz pojedynczym operatorem @:; w dowolny 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
    

    Note

    Podczas wyprowadzania tekstu, jak pokazano w tej — sekcji przy użyciu elementu HTML, operatora @: lub elementu — <text> ASP.NET nie jest kodowane w języku HTML. (Jak wspomniano wcześniej, ASP.NET koduje dane wyjściowe wyrażeń kodów serwera i bloków kodu serwera, które są poprzedzone @, z wyjątkiem przypadków specjalnych zanotowanych w tej sekcji).

Odstępu

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

@Code Dim personName =    "Smith"    End Code

Przerywanie długich instrukcji w wielu wierszach

Można przerwać wykonywanie instrukcji Long Code w wielu wierszach przy użyciu znaku podkreślenia _ (który w Visual Basic jest nazywany znakiem kontynuacji) po każdym wierszu kodu. Aby przerwać instrukcję do następnego wiersza, na końcu wiersza Dodaj spację, a następnie znak kontynuacji. Kontynuuj wykonywanie instrukcji w następnym wierszu. Można zawijać instrukcje na tyle wierszy, ile potrzebujesz, aby zwiększyć czytelność. Następujące instrukcje są takie same:

@Code
    Dim familyName _
    =  "Smith" 
End Code

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

Nie można jednak otoczyć wiersza 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 otacza wiele wierszy, takich jak powyższy kod, należy użyć operatora łączenia (&), który będzie widoczny w dalszej części tego artykułu.

Komentarze do kodu

Komentarze umożliwiają wystawianie notatek dla siebie lub dla innych osób. Komentarze składnia Razor są poprzedzone @* i kończyć się *@.

@* 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ładnia Razor lub użyć zwykłego znaku Visual Basic komentarza, 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 to nazwany obiekt, który służy do przechowywania danych. Można nazwać zmienne, ale nazwa musi zaczynać się od litery i nie może zawierać spacji ani znaków zarezerwowanych. W Visual Basic, jak pokazano wcześniej, przypadek liter w nazwie zmiennej nie ma znaczenia.

Zmienne i typy danych

Zmienna może mieć określony typ danych, co wskazuje, jakiego rodzaju dane są przechowywane w zmiennej. Można mieć zmienne ciągów, które przechowują wartości ciągu (takie jak "Hello World"), zmienne typu Integer, które przechowują wartości całkowite (takie jak 3 lub 79) i zmienne dat, które przechowują wartości daty w różnych formatach (na przykład 4/12/2012 lub marzec 2009). Istnieje wiele innych typów danych, których można użyć.

Nie trzeba jednak określać typu dla 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 to prawda).

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

Poniższy przykład pokazuje niektóre wyrażenia wbudowane, które używają zmiennych na stronie sieci Web.

@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 zazwyczaj zwykle określa typ danych, czasami nie jest to możliwe. W związku z tym może być konieczne ASP.NET przez wykonanie jawnej konwersji. Nawet jeśli nie musisz konwertować typów, czasami warto przetestować, aby zobaczyć, jakiego typu dane mogą pracować.

Najczęstszym przypadkiem jest to, że trzeba przekonwertować ciąg na inny typ, na przykład na liczbę całkowitą lub datę. 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

Zgodnie z regułą dane wprowadzane przez użytkownika są uznawane za ciągi. Nawet jeśli użytkownik otrzyma monit o wprowadzenie numeru, a nawet jeśli podano cyfrę, gdy dane wejściowe użytkownika są przesyłane i odczytywane w kodzie, dane są w formacie ciągu. W związku z tym należy przekonwertować ciąg na liczbę. W przykładzie, jeśli spróbujesz wykonać operacje arytmetyczne na wartościach bez ich konwersji, następujące wyniki błędu, ponieważ ASP.NET nie mogą 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żna dodać liczby.

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

Metoda

Opis

Przykład


AsInt(), IsInt()

Konwertuje ciąg, który reprezentuje liczbę całkowitą (na przykład "593") do liczby całkowitej.

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

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

AsFloat(), IsFloat()

Konwertuje ciąg, który ma wartość dziesiętną, taką jak "1,3" lub "7,439" do liczby zmiennoprzecinkowej.

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

AsDecimal(), IsDecimal()

Konwertuje ciąg, który ma wartość dziesiętną, taką jak "1,3" lub "7,439" do liczby dziesiętnej. (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, który reprezentuje wartość daty i godziny dla typu DateTime ASP.NET.

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

ToString()

Konwertuje wszystkie inne typy 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 jest słowem kluczowym lub znakiem, który informuje ASP.NET jakiego rodzaju polecenia wykonać w wyrażeniu. Visual Basic obsługuje wiele operatorów, ale wystarczy tylko rozpoznać kilka, aby rozpocząć opracowywanie stron sieci Web ASP.NET. Poniższa tabela zawiera podsumowanie najbardziej typowych operatorów.

Zakład

Opis

Przykłady


+ - * /

Operatory matematyczne używane w wyrażeniach liczbowych.

@(5 + 13)

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

=

Przypisanie i równość. W zależności od kontekstu przypisuje wartość po prawej stronie instrukcji do obiektu po lewej stronie lub sprawdza wartości pod kątem równości.

Dim age = 17

Dim income = Request("AnnualIncome")

<>

Nierówności. Zwraca 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 niż 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 jest używane do dołączania ciągów.

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

+= -=

Operatory zwiększania i zmniejszania, które dodają i odejmujeją 1 (odpowiednio) od zmiennej.

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

.

Kropka. Używane do rozróżniania obiektów i ich właściwości i metod.

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

()

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

@(3 + 7)

@Request.MapPath(Request.FilePath)

Not

Niemożliwe. Odwraca wartość true na false i odwrotnie. Zwykle używany jako skrócony sposób testowania dla False (to oznacza, że nie True).

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

AndAlso OrElse

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

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

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

Często pracujesz ze ścieżkami plików i folderów w kodzie. Oto przykład struktury folderów fizycznych dla witryny sieci Web, która może pojawić się na komputerze deweloperskim:

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

Poniżej przedstawiono niektóre istotne informacje dotyczące adresów URL i ścieżek:

  • Adres URL rozpoczyna się od nazwy domeny (http://www.example.com) lub nazwy serwera (http://localhost, http://mycomputer).
  • Adres URL odpowiada ścieżce fizycznej na komputerze-hoście. Na przykład http://myserver mogą odpowiadać C:\websites\mywebsite folderu na serwerze.
  • Ścieżka wirtualna jest skrótem do reprezentowania ścieżek w kodzie bez konieczności określania pełnej ścieżki. Zawiera część adresu URL, która następuje po nazwie domeny lub serwera. W przypadku używania ścieżek wirtualnych można przenieść kod do innej domeny lub serwera bez konieczności aktualizacji ścieżek.

Oto przykład, który pomoże zrozumieć różnice:

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 jest/, podobnie jak katalog główny dysku C:. (Ścieżki folderów wirtualnych zawsze używają ukośników). Ś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 jest zgodna z dokładną ścieżką fizyczną).

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

Konwertowanie wirtualnej 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). Tej metody należy używać w dowolnym momencie, gdy potrzebna jest kompletna ścieżka fizyczna. Typowym przykładem jest odczytywanie lub zapisywanie pliku tekstowego lub pliku obrazu na serwerze sieci Web.

Zwykle nie jest znana absolutna ścieżka fizyczna witryny na serwerze lokacji hostingu, dlatego ta metoda może przekonwertować ścieżkę, którą znasz — ścieżkę wirtualną — do odpowiedniej ścieżki na serwerze. Ścieżka wirtualna do pliku lub folderu zostanie przekazana 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: Metoda ~ operatora i href

W pliku . cshtml lub . vbhtml można odwoływać się do wirtualnej ścieżki katalogu głównego przy użyciu operatora ~. Jest to bardzo przydatne, ponieważ można przenieść strony w obrębie witryny, a wszystkie linki, które zawierają do innych stron, nie zostaną zerwane. Jest on również przydatny w przypadku przenoszenia witryny sieci Web do innej lokalizacji. Oto kilka przykładów:

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

Jeśli witryna sieci Web jest http://myserver/myapp, Oto, jak ASP.NET będzie traktować te ścieżki podczas uruchamiania strony:

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

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

Operatora ~ można użyć zarówno w kodzie serwera (jak powyżej), jak to:

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

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

W znacznikach można użyć operatora ~, aby tworzyć ścieżki do zasobów, takich jak pliki obrazów, inne strony sieci Web i pliki CSS. Po uruchomieniu strony ASP.NET przegląda stronę (kod i znacznik) i rozwiązuje wszystkie ~ odwołania do odpowiedniej ścieżki.

Logika warunkowa i pętle

Kod serwera ASP.NET umożliwia wykonywanie zadań w oparciu o warunki i pisanie kodu, który powtarza instrukcje, która pociąga za siebie określoną liczbę razy, kod, który uruchamia pętlę.

Warunki testowania

Aby przetestować prosty warunek, użyj instrukcji If...Then, która zwraca True lub False w oparciu o określony test:

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

Słowo kluczowe If uruchamia blok. Rzeczywisty test (warunek) następuje po słowie kluczowym If i zwraca wartość true lub false. Instrukcja If zostanie zakończona z Then. Instrukcje, które będą uruchamiane, jeśli test ma wartość true, są ujęte w If i End If. Instrukcja If może zawierać blok Else, który określa 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

Jeśli instrukcja If uruchamia blok kodu, nie trzeba używać zwykłych instrukcji Code...End Code w celu uwzględnienia bloków. Możesz po prostu dodać @ do bloku i będzie on działać. Takie podejście współdziała z If, a także innymi Visual Basic programistycznymi słowami kluczowymi, które są umieszczane w blokach kodu, takich jak For, For Each, Do Whileitd.

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

Można dodać wiele warunków przy użyciu jednego lub kilku bloków ElseIf:

@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 bloku If nie ma wartości true, sprawdzana jest ElseIf warunek. Jeśli ten warunek jest spełniony, instrukcje w bloku ElseIf są wykonywane. Jeśli żaden z warunków nie zostanie spełniony, instrukcje w bloku Else są wykonywane. Można dodać dowolną liczbę bloków ElseIf, a następnie zamknąć z blokiem Else, podobnie jak w przypadku "wszystko inne" warunek.

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

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

Wartość do przetestowania jest w nawiasach (w przykładzie zmienna Weekday). Każdy test używa instrukcji Case, która wyświetla wartość. Jeśli wartość instrukcji Case pasuje do wartości testowej, wykonywany jest kod w tym Case bloku.

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

Razor-Img10

Kod zapętlenia

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

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

Pętla zaczyna się od słowa kluczowego For, a następnie trzech elementów:

  • Bezpośrednio po instrukcji For deklaruje zmienną licznika (nie trzeba używać Dim), a następnie wskazuje zakres, jak w i = 10 to 20. Oznacza to, że zmienna i rozpocznie zliczanie w wysokości 10 i kontynuuje do momentu osiągnięcia 20 (włącznie).
  • Między instrukcjami For i Next jest zawartość bloku. Może zawierać co najmniej jedną instrukcję Code, która jest wykonywana z każdą pętlą.
  • Instrukcja Next i zatrzymuje pętlę. Zwiększa licznik i uruchamia następną iterację pętli.

Wiersz kodu między For i Next wierszy zawiera kod, który jest uruchamiany dla każdej iteracji pętli. Znacznik tworzy nowy akapit (<p> elementu) za każdym razem i dodaje linię 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, a tekst w każdym wierszu wskazujący numer elementu.

Razor-Img11

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

Ten przykład zwraca elementy z kolekcji Request.ServerVariables (która zawiera informacje o serwerze sieci Web). Używa pętli For Each, aby wyświetlić nazwę każdego elementu przez utworzenie nowego elementu <li> na liście punktowanej HTML.

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

Po słowie kluczowym For Each następuje zmienna, która reprezentuje pojedynczy element w kolekcji (w przykładzie myItem), po którym następuje słowo kluczowe In, a następnie kolekcja, w której ma się znajdować pętla. W treści pętli For Each można uzyskać dostęp do bieżącego elementu przy użyciu zmiennej, która została zadeklarowana wcześniej.

Razor-Img12

Aby utworzyć więcej pętli ogólnego 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 rozpoczyna się od słowa kluczowego Do While, po którym następuje warunek, po którym następuje blok, który ma zostać powtórzony. Pętle zwykle zwiększają się (Dodaj do) lub zmniejszają (odejmowanie od) zmiennej lub obiektu używanej do zliczania. W przykładzie operator += dodaje 1 do wartości zmiennej za każdym razem, gdy pętla zostanie uruchomiona. (Aby zmniejszyć zmienną w pętli, która liczy w dół, użyj operatora zmniejszania -=).

Obiekty i kolekcje

Niemal wszystko w witrynie ASP.NET Web to obiekt, w tym sama strona sieci Web. W tej sekcji omówiono niektóre ważne obiekty, które często działają w kodzie.

Obiekty strony

Najbardziej podstawowym obiektem w ASP.NET jest strona. Można 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 obiektu Request strony:

@Code
    Dim path = Request.FilePath
End Code

Właściwości obiektu Page można użyć, aby uzyskać wiele informacji, takich jak:

  • Request. Jak już widzisz, jest to zbiór informacji dotyczących bieżącego żądania, w tym typ przeglądarki, która złożyła żądanie, adres URL strony, tożsamość użytkownika itd.

  • Response. Jest to zbiór informacji o odpowiedzi (stronie), które zostaną wysłane do przeglądarki po zakończeniu działania kodu serwera. Na przykład można użyć tej właściwości do zapisu 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, na przykład z kolekcją Customer obiektów z bazy danych. ASP.NET zawiera wiele wbudowanych kolekcji, takich jak kolekcja Request.Files.

Często pracujesz z danymi w kolekcjach. Dwa popularne 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 poszczególnych elementów:

<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

Z tablicami deklaruje się konkretny typ danych, taki jak String, Integerlub DateTime. Aby wskazać, że zmienna może zawierać tablicę, należy dodać nawiasy do nazwy zmiennej w deklaracji (takiej jak Dim myVar() As String). Dostęp do elementów w tablicy można uzyskać przy użyciu ich położenia (indeksu) lub instrukcji For Each. Indeksy tablicy są oparte na — zero oznaczające, że pierwszy element znajduje się na pozycji 0, drugi element znajduje się na pozycji 1 i tak dalej.

@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

Możesz określić liczbę elementów w tablicy, pobierając jej Właściwość Length. Aby uzyskać położenie określonego elementu w tablicy (to oznacza, aby przeszukać tablicę), użyj metody Array.IndexOf. Można również wykonywać operacje, takie jak odwracanie zawartości tablicy (Metoda Array.Reverse) lub sortowanie zawartości (Metoda Array.Sort).

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

Razor-Img13

Słownik jest kolekcją par klucz/wartość, w których podano 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 obiekt Dictionary. Można przypisać słownik do zmiennej za pomocą słowa kluczowego Dim. Możesz wskazać 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żna wywołać metodę Add 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 przedstawiono wcześniej w tym artykule, obiekty, z którymi program ma metody. Na przykład obiekt Database może mieć metodę Database.Connect. Wiele metod ma także jeden lub więcej parametrów. Parametr jest wartością, którą można przekazać do metody, aby umożliwić wykonywanie jej zadania. Na przykład Przyjrzyj się deklaracji dla metody Request.MapPath, 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 dla metody to virtualPath, baseVirtualDiri allowCrossAppMapping. (Należy zauważyć, że w deklaracji parametry są wyświetlane z danymi o typach danych, które będą akceptowane). Po wywołaniu tej metody należy podać wartości dla wszystkich trzech parametrów.

Gdy używasz Visual Basic z składnia Razor, masz 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, która jest określona w deklaracji metody. (Zazwyczaj znana jest ta kolejność, odczytując dokumentację dla metody). Należy postępować zgodnie z kolejnością, a w razie potrzeby nie można — pominąć żadnego z parametrów, należy przekazać pusty ciąg ("") lub null dla parametru pozycyjnego, dla którego nie ma wartości.

W poniższym przykładzie przyjęto założenie, że w witrynie sieci Web znajduje się folder o nazwie skrypty . Kod wywołuje metodę Request.MapPath i przekazuje wartości dla trzech parametrów w poprawnej kolejności. Następnie zostanie wyświetlona 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 dla metody, można zachować przejrzystość kodu i bardziej czytelność przy użyciu nazwanych parametrów. Aby wywołać metodę przy użyciu nazwanych parametrów, należy określić nazwę parametru, po którym następuje := a następnie podać wartość. Zaletą parametrów nazwanych jest możliwość dodawania ich w dowolnej kolejności. (Wadą jest to, że wywołanie metody nie jest jako kompaktowe).

Poniższy przykład wywołuje tę samą metodę, jak powyżej, ale używa nazwanych parametrów do dostarczenia 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ą przesyłane w innej kolejności. Jeśli jednak zostanie uruchomiony poprzedni przykład i ten przykład zwróci tę samą wartość.

Obsługa błędów

Instrukcje try-catch

Często występują instrukcje w kodzie, które mogą zakończyć się niepowodzeniem z przyczyn poza formantem. Na przykład:

  • Jeśli kod próbuje otworzyć, utworzyć, odczytać lub zapisać plik, mogą wystąpić wszystkie rodzaje błędów. Plik, który nie istnieje, może być zablokowany, kod może nie mieć uprawnień i tak dalej.
  • Podobnie, jeśli kod próbuje zaktualizować rekordy w bazie danych, mogą wystąpić problemy z uprawnieniami, połączenie z bazą danych może być porzucone, dane do zapisania mogą być nieprawidłowe i tak dalej.

W warunkach programowania te sytuacje nazywają się wyjątkami. Jeśli Twój kod napotyka wyjątek, generuje (zgłasza) komunikat o błędzie, który jest, co jest najlepszym rozwiązaniem 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ć instrukcji Try/Catch. W instrukcji Try uruchamiasz sprawdzany kod. W co najmniej jednej instrukcji Catch można wyszukać konkretne błędy (określone typy wyjątków), które mogły wystąpić. Możesz dołączyć dowolną liczbę instrukcji Catch, ile potrzebujesz, aby wyszukać błędy, które są przewidywane.

Note

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

Poniższy przykład pokazuje stronę, która tworzy plik tekstowy przy pierwszym żądaniu, a następnie wyświetla przycisk, który umożliwia użytkownikowi otwarcie pliku. Przykład celowo używa nieprawidłowej nazwy pliku, aby powodował wyjątek. Kod zawiera instrukcje Catch dla dwóch możliwych wyjątków: FileNotFoundException, które występuje, jeśli nazwa pliku jest zła, i DirectoryNotFoundException, który występuje, jeśli ASP.NET nie może odnaleźć folderu. (Możesz usunąć komentarz z instrukcji w przykładzie, aby zobaczyć, jak działa, gdy wszystko działa prawidłowo).

Jeśli kod nie obsłużył wyjątku, zobaczysz stronę błędu, jak poprzedni zrzut ekranu. Jednak sekcja Try/Catch pozwala zapobiec wyświetlaniu tych typów błędów przez użytkownika.

@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 materiały

Dokumentacja referencyjna