Introdução à programação na Web ASP.NET usando a sintaxe Razor (Visual Basic)

por Tom FitzMacken

Este artigo fornece uma visão geral da programação com Páginas da Web do ASP.NET usando a sintaxe Razor e o Visual Basic. ASP.NET é a tecnologia da Microsoft para executar páginas da Web dinâmicas em servidores Web.

O que você aprenderá:

  • As oito principais dicas de programação para começar a programar Páginas da Web do ASP.NET usando a sintaxe Razor.
  • Conceitos básicos de programação que você precisará.
  • O que ASP.NET código do servidor e a sintaxe Razor se trata.

Versões de software

  • Páginas da Web do ASP.NET (Razor) 3

Este tutorial também funciona com Páginas da Web do ASP.NET 2.

A maioria dos exemplos de como usar Páginas da Web do ASP.NET com sintaxe Razor usa C#. Mas a sintaxe Razor também dá suporte ao Visual Basic. Para programar uma página da Web ASP.NET no Visual Basic, crie uma página da Web com uma extensão de nome de arquivo .vbhtml e adicione o código do Visual Basic. Este artigo fornece uma visão geral de como trabalhar com a linguagem e a sintaxe do Visual Basic para criar ASP.NET páginas da Web.

Observação

Os modelos de site padrão do Microsoft WebMatrix (Bakery, Photo Gallery e Starter Site, etc.) estão disponíveis nas versões C# e Visual Basic. Você pode instalar os modelos do Visual Basic por como pacotes NuGet. Os modelos de site são instalados na pasta raiz do seu site em uma pasta chamada Modelos da Microsoft.

As 8 principais dicas de programação

Esta seção lista algumas dicas que você precisa saber ao começar a escrever ASP.NET código do servidor usando a sintaxe Razor.

1. Você adiciona código a uma página usando o caractere @

O @ caractere inicia expressões embutidas, blocos de instrução única e blocos de várias instruções:

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

O resultado exibido em um navegador:

Razor-Img1

Dica

Codificação HTML

Quando você exibe o conteúdo em uma página usando o @ caractere , como nos exemplos anteriores, ASP.NET codifica html a saída. Isso substitui caracteres HTML reservados (como < e > e &) por códigos que permitem que os caracteres sejam exibidos como caracteres em uma página da Web em vez de serem interpretados como marcas OU entidades HTML. Sem a codificação HTML, a saída do código do servidor pode não ser exibida corretamente e pode expor uma página a riscos de segurança.

Se sua meta for gerar marcação HTML que renderize marcas como marcação (por exemplo <p></p> , para um parágrafo ou <em></em> para enfatizar o texto), consulte a seção Combinando texto, marcação e código em blocos de código mais adiante neste artigo.

Você pode ler mais sobre codificação HTML em Trabalhando com formulários HTML em sites de Páginas da Web do ASP.NET.

2. Coloque blocos de código com Código... Código final

Um bloco de código inclui uma ou mais instruções de código e é incluído com as palavras-chave Code e End Code. Coloque o palavra-chave de abertura Code imediatamente após o @ caractere — não pode haver espaço em branco entre eles.

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

O resultado exibido em um navegador:

Razor-Img2

3. Dentro de um bloco, você encerra cada instrução de código com uma quebra de linha

Em um bloco de código do Visual Basic, cada instrução termina com uma quebra de linha. (Posteriormente no artigo, você verá uma maneira de encapsular uma instrução de código longa em várias linhas, se necessário.)

<!-- 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. Você usa variáveis para armazenar valores

Você pode armazenar valores em uma variável, incluindo cadeias de caracteres, números e datas, etc. Você cria uma nova variável usando o Dim palavra-chave. Você pode inserir valores variáveis diretamente em uma página usando @.

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

O resultado exibido em um navegador:

Razor-Img3

5. Coloque valores de cadeia de caracteres literais entre aspas duplas

Uma cadeia de caracteres é uma sequência de caracteres que são tratados como texto. Para especificar uma cadeia de caracteres, coloque-a entre aspas duplas:

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

Para inserir aspas duplas dentro de um valor de cadeia de caracteres, insira dois caracteres de aspas duplas. Se você quiser que o caractere de aspas duplas apareça uma vez na saída da página, insira-o como "" dentro da cadeia de caracteres entre aspas e, se quiser que ele apareça duas vezes, insira-o como """" dentro da cadeia de caracteres entre aspas.

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

O resultado exibido em um navegador:

Razor-Img4

6. O código do Visual Basic não diferencia maiúsculas de minúsculas

A linguagem do Visual Basic não diferencia maiúsculas de minúsculas. Palavras-chave de programação (como Dim, Ife True) e nomes de variáveis (como myString, ou subTotal) podem ser escritos em qualquer caso.

As linhas de código a seguir atribuem um valor à variável lastname usando um nome minúsculo e, em seguida, geram o valor da variável para a página usando um nome maiúsculo.

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

O resultado exibido em um navegador:

vb-syntax-5

7. Grande parte da codificação envolve trabalhar com objetos

Um objeto representa uma coisa com a qual você pode programar : uma página, uma caixa de texto, um arquivo, uma imagem, uma solicitação da Web, uma mensagem de email, um registro de cliente (linha de banco de dados), etc. Os objetos têm propriedades que descrevem suas características — um objeto de caixa de texto tem uma Text propriedade, um objeto de solicitação tem uma Url propriedade, uma mensagem de email tem uma From propriedade e um objeto de cliente tem uma FirstName propriedade . Os objetos também têm métodos que são os "verbos" que podem ser executados. Os exemplos incluem o método de um objeto de Save arquivo, o método de um objeto de Rotate imagem e o método de um objeto de Send email.

Você geralmente trabalhará com o Request objeto , que fornece informações como os valores dos campos de formulário na página (caixas de texto etc.), que tipo de navegador fez a solicitação, a URL da página, a identidade do usuário etc. Este exemplo mostra como acessar as Request propriedades do objeto e como chamar o MapPath método do Request objeto , que fornece o caminho absoluto da página no servidor:

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

O resultado exibido em um navegador:

Razor-Img5

8. Você pode escrever código que toma decisões

Um recurso importante das páginas da Web dinâmicas é que você pode determinar o que fazer com base nas condições. A maneira mais comum de fazer isso é com a If instrução (e a instrução opcional 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>

A instrução If IsPost é uma forma abreviada de escrever If IsPost = True. Juntamente com If instruções, há várias maneiras de testar condições, repetir blocos de código e assim por diante, que são descritas posteriormente neste artigo.

O resultado exibido em um navegador (depois de clicar em Enviar):

Razor-Img6

Dica

Métodos HTTP GET e POST e a propriedade IsPost

O protocolo usado para páginas da Web (HTTP) dá suporte a um número muito limitado de métodos ("verbos") que são usados para fazer solicitações ao servidor. Os dois mais comuns são GET, que é usado para ler uma página, e POST, que é usado para enviar uma página. Em geral, na primeira vez que um usuário solicita uma página, a página é solicitada usando GET. Se o usuário preencher um formulário e clicar em Enviar, o navegador fará uma solicitação POST para o servidor.

Na programação da Web, geralmente é útil saber se uma página está sendo solicitada como GET ou COMO POST para que você saiba como processar a página. Em Páginas da Web do ASP.NET, você pode usar a IsPost propriedade para ver se uma solicitação é GET ou POST. Se a solicitação for um POST, a IsPost propriedade retornará true e você poderá fazer coisas como ler os valores das caixas de texto em um formulário. Muitos exemplos que você verá mostram como processar a página de maneira diferente, dependendo do valor de IsPost.

Um exemplo de código simples

Este procedimento mostra como criar uma página que ilustra técnicas básicas de programação. No exemplo, você cria uma página que permite que os usuários insiram dois números e, em seguida, ele os adiciona e exibe o resultado.

  1. No editor, crie um novo arquivo e nomeie-o como AddNumbers.vbhtml.

  2. Copie o código e a marcação a seguir para a página, substituindo qualquer coisa que já esteja na página.

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

    Aqui estão algumas coisas para você observar:

    • O @ caractere inicia o primeiro bloco de código na página e precede a totalMessage variável inserida na parte inferior.
    • O bloco na parte superior da página é colocado em Code...End Code.
    • As variáveis total, num1, num2e totalMessage armazenam vários números e uma cadeia de caracteres.
    • O valor da cadeia de caracteres literal atribuído à totalMessage variável está entre aspas duplas.
    • Como o código do Visual Basic não diferencia maiúsculas de minúsculas, quando a totalMessage variável é usada perto da parte inferior da página, seu nome só precisa corresponder à ortografia da declaração de variável na parte superior da página. O uso de maiúsculas e minúsculas não importa.
    • A expressão num1.AsInt() + num2.AsInt() mostra como trabalhar com objetos e métodos. O AsInt método em cada variável converte a cadeia de caracteres inserida por um usuário em um número inteiro (um inteiro) que pode ser adicionado.
    • A <form> marca inclui um method="post" atributo . Isso especifica que, quando o usuário clicar em Adicionar, a página será enviada ao servidor usando o método HTTP POST. Quando a página é enviada, o código If IsPost é avaliado como true e o código condicional é executado, exibindo o resultado da adição dos números.
  3. Salve a página e execute-a em um navegador. (Verifique se a página está selecionada no workspace Arquivos antes de executá-la.) Insira dois números inteiros e clique no botão Adicionar .

    Razor-Img7

Sintaxe e linguagem do Visual Basic

Anteriormente, você viu um exemplo básico de como criar uma página da Web ASP.NET e como você pode adicionar código do servidor à marcação HTML. Aqui, você aprenderá as noções básicas de como usar o Visual Basic para escrever ASP.NET código do servidor usando a sintaxe Razor , ou seja, as regras da linguagem de programação.

Se você tiver experiência com programação (especialmente se tiver usado C, C++, C#, Visual Basic ou JavaScript), muito do que você leu aqui será familiar. Você provavelmente precisará se familiarizar apenas com a forma como o código WebMatrix é adicionado à marcação em arquivos .vbhtml .

Combinando texto, marcação e código em blocos de código

Em blocos de código do servidor, muitas vezes você desejará gerar texto e marcação para a página. Se um bloco de código do servidor contiver texto que não seja código e que, em vez disso, deve ser renderizado como está, ASP.NET precisa ser capaz de distinguir esse texto do código. Há várias maneiras de fazer isso.

  • Coloque o texto em um elemento de bloco HTML como <p></p> ou <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
    

    O elemento HTML pode incluir texto, elementos HTML adicionais e expressões de código de servidor. Quando ASP.NET vê a marca HTML de abertura (por exemplo, <p>), ela renderiza tudo o que o elemento e seu conteúdo estão no navegador (e resolve as expressões de código do servidor).

  • Use o @: operador ou o <text> elemento . O @: gera uma única linha de conteúdo que contém texto sem formatação ou marcas HTML sem correspondência; o <text> elemento inclui várias linhas à saída. Essas opções são úteis quando você não deseja renderizar um elemento HTML como parte da saída.

    @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
    

    O exemplo a seguir repete o exemplo anterior, mas usa um único par de <text> marcas para colocar o texto a ser renderizado.

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

    No exemplo a seguir, as <text> marcas e </text> incluem três linhas, todas com alguns textos não contidos e marcas HTML não correspondentes (<br />), juntamente com o código do servidor e marcas HTML correspondentes. Novamente, você também pode preceder cada linha individualmente com o @: operador ; de qualquer maneira funciona.

    @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
    

    Observação

    Quando você gera texto conforme mostrado nesta seção , usando um elemento HTML, o @: operador ou o <text> elemento , ASP.NET não codifica html a saída. (Conforme observado anteriormente, ASP.NET codifica a saída de expressões de código do servidor e blocos de código de servidor precedidos por @, exceto nos casos especiais observados nesta seção.)

Espaço em branco

Espaços extras em uma instrução (e fora de um literal de cadeia de caracteres) não afetam a instrução :

@Code Dim personName =    "Smith"    End Code

Dividir instruções longas em várias linhas

Você pode dividir uma instrução de código longa em várias linhas usando o caractere _ de sublinhado (que no Visual Basic é chamado de caractere de continuação) após cada linha de código. Para quebrar uma instrução na próxima linha, no final da linha, adicione um espaço e, em seguida, o caractere de continuação. Continue a instrução na próxima linha. Você pode encapsular instruções em quantas linhas precisar para melhorar a legibilidade. As seguintes instruções são iguais:

@Code
    Dim familyName _
    =  "Smith" 
End Code

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

No entanto, você não pode encapsular uma linha no meio de um literal de cadeia de caracteres. O seguinte exemplo não funciona:

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

Para combinar uma cadeia de caracteres longa que é encapsulada em várias linhas, como o código acima, você precisaria usar o operador de concatenação (&), que você verá mais adiante neste artigo.

Comentários de código

Os comentários permitem que você deixe anotações para si mesmo ou para outras pessoas. Os comentários de sintaxe razor são prefixados com e terminam com @**@.

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

Em blocos de código, você pode usar os comentários de sintaxe do Razor ou usar um caractere de comentário comum do Visual Basic, que é uma aspa simples (') prefixada para cada linha.

@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

Variáveis

Uma variável é um objeto nomeado que você usa para armazenar dados. Você pode nomear variáveis qualquer coisa, mas o nome deve começar com um caractere alfabético e não pode conter espaço em branco ou caracteres reservados. No Visual Basic, como você viu anteriormente, o caso das letras em um nome de variável não importa.

Variáveis e tipos de dados

Uma variável pode ter um tipo de dados específico, que indica que tipo de dados é armazenado na variável. Você pode ter variáveis de cadeia de caracteres que armazenam valores de cadeia de caracteres (como "Olá, mundo"), variáveis inteiras que armazenam valores de número inteiro (como 3 ou 79) e variáveis de data que armazenam valores de data em uma variedade de formatos (como 12/04/2012 ou março de 2009). E há muitos outros tipos de dados que você pode usar.

No entanto, você não precisa especificar um tipo para uma variável. Na maioria dos casos, ASP.NET pode descobrir o tipo com base em como os dados na variável estão sendo usados. (Ocasionalmente, você deve especificar um tipo; você verá exemplos em que isso é verdadeiro.)

Para declarar uma variável sem especificar um tipo, use Dim mais o nome da variável (por exemplo, Dim myVar). Para declarar uma variável com um tipo, use Dim mais o nome da variável, seguido por As e, em seguida, o nome do tipo (por exemplo, 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

O exemplo a seguir mostra algumas expressões embutidas que usam as variáveis em uma página da 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>

O resultado exibido em um navegador:

Razor-Img9

Convertendo e testando tipos de dados

Embora ASP.NET geralmente possa determinar um tipo de dados automaticamente, às vezes não pode. Portanto, talvez seja necessário ajudar a ASP.NET executando uma conversão explícita. Mesmo que você não precise converter tipos, às vezes é útil testar para ver com que tipo de dados você pode estar trabalhando.

O caso mais comum é que você precisa converter uma cadeia de caracteres em outro tipo, como em um inteiro ou data. O exemplo a seguir mostra um caso típico em que você deve converter uma cadeia de caracteres em um número.

@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

Como regra, a entrada do usuário chega a você como cadeias de caracteres. Mesmo que você tenha solicitado que o usuário insira um número e, mesmo que ele tenha inserido um dígito, quando a entrada do usuário é enviada e você a lê no código, os dados estão no formato de cadeia de caracteres. Portanto, você deve converter a cadeia de caracteres em um número. No exemplo, se você tentar executar aritmética nos valores sem convertê-los, o seguinte erro resultará, pois ASP.NET não poderá adicionar duas cadeias de caracteres:

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

Para converter os valores em inteiros, chame o AsInt método . Se a conversão for bem-sucedida, você poderá adicionar os números.

A tabela a seguir lista alguns métodos comuns de conversão e teste para variáveis.

Método

Descrição

Exemplo


AsInt(), IsInt()

Converte uma cadeia de caracteres que representa um número inteiro (como "593") em um inteiro.

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

AsBool(), IsBool()

Converte uma cadeia de caracteres como "true" ou "false" em um tipo booliano.

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

AsFloat(), IsFloat()

Converte uma cadeia de caracteres que tem um valor decimal como "1.3" ou "7.439" em um número de ponto flutuante.

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

AsDecimal(), IsDecimal()

Converte uma cadeia de caracteres que tem um valor decimal como "1.3" ou "7.439" em um número decimal. (Em ASP.NET, um número decimal é mais preciso do que um número de ponto flutuante.)

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

AsDateTime(), IsDateTime()

Converte uma cadeia de caracteres que representa um valor de data e hora para o tipo ASP.NET DateTime .

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

ToString()

Converte qualquer outro tipo de dados em uma cadeia de caracteres.

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

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

Operadores

Um operador é um palavra-chave ou caractere que informa ASP.NET que tipo de comando executar em uma expressão. O Visual Basic dá suporte a muitos operadores, mas você só precisa reconhecer alguns para começar a desenvolver ASP.NET páginas da Web. A tabela a seguir resume os operadores mais comuns.

Operador

Descrição

Exemplos


+ - * /

Operadores matemáticos usados em expressões numéricas.

@(5 + 13)

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

=

Atribuição e igualdade. Dependendo do contexto, atribui o valor à direita de uma instrução ao objeto à esquerda ou verifica se há igualdade nos valores.

Dim age = 17

Dim income = Request("AnnualIncome")

<>

Desigualdade. Retornará True se os valores não forem iguais.

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

< > <= >=

Menor que, maior que, menor ou igual e maior ou igual.

If 2 < 3 Then
    ' Do something.
End If

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

&

Concatenação, que é usada para unir cadeias de caracteres.

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

+= -=

Os operadores de incremento e decremento, que adicionam e subtraem 1 (respectivamente) de uma variável.

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

.

Ponto. Usado para distinguir objetos e suas propriedades e métodos.

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

()

Parênteses. Usado para agrupar expressões, para passar parâmetros para métodos e para acessar membros de matrizes e coleções.

@(3 + 7)

@Request.MapPath(Request.FilePath)

Not

Não. Inverte um valor verdadeiro para false e vice-versa. Normalmente usado como uma maneira abreviada de False testar (ou seja, para não True).

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

AndAlso OrElse

AND e OR lógicos, que são usados para vincular condições.

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

Trabalhando com caminhos de arquivo e pasta no código

Geralmente, você trabalhará com caminhos de arquivo e pasta em seu código. Aqui está um exemplo de estrutura de pasta física para um site, pois ela pode aparecer em seu computador de desenvolvimento:

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

Aqui estão alguns detalhes essenciais sobre URLs e caminhos:

  • Uma URL começa com um nome de domínio (http://www.example.com) ou um nome de servidor (http://localhost, http://mycomputer).
  • Uma URL corresponde a um caminho físico em um computador host. Por exemplo, http://myserver pode corresponder à pasta C:\websites\mywebsite no servidor.
  • Um caminho virtual é abreviado para representar caminhos no código sem precisar especificar o caminho completo. Ele inclui a parte de uma URL que segue o nome do domínio ou servidor. Ao usar caminhos virtuais, você pode mover seu código para um domínio ou servidor diferente sem precisar atualizar os caminhos.

Aqui está um exemplo para ajudá-lo a entender as diferenças:

URL completa http://mycompanyserver/humanresources/CompanyPolicy.htm
Nome do servidor mycompanyserver
Caminho virtual /humanresources/CompanyPolicy.htm
Caminho físico C:\mywebsites\humanresources\CompanyPolicy.htm

A raiz virtual é /, assim como a raiz da unidade C: é . (Os caminhos de pasta virtual sempre usam barras de avanço.) O caminho virtual de uma pasta não precisa ter o mesmo nome que a pasta física; pode ser um alias. (Em servidores de produção, o caminho virtual raramente corresponde a um caminho físico exato.)

Quando você trabalha com arquivos e pastas no código, às vezes você precisa referenciar o caminho físico e, às vezes, um caminho virtual, dependendo de com quais objetos você está trabalhando. ASP.NET fornece estas ferramentas para trabalhar com caminhos de arquivo e pasta no código: o Server.MapPath método e o operador e Href o ~ método.

Convertendo caminhos virtuais em físicos: o método Server.MapPath

O Server.MapPath método converte um caminho virtual (como /default.cshtml) em um caminho físico absoluto (como C:\WebSites\MyWebSiteFolder\default.cshtml). Você usa esse método sempre que precisa de um caminho físico completo. Um exemplo típico é quando você está lendo ou gravando um arquivo de texto ou um arquivo de imagem no servidor Web.

Normalmente, você não conhece o caminho físico absoluto do seu site no servidor de um site de hospedagem, portanto, esse método pode converter o caminho que você conhece — o caminho virtual — para o caminho correspondente no servidor para você. Você passa o caminho virtual para um arquivo ou pasta para o método e ele retorna o caminho físico:

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

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

Referenciando a raiz virtual: o operador ~ e o método Href

Em um arquivo .cshtml ou .vbhtml , você pode referenciar o caminho raiz virtual usando o ~ operador . Isso é muito útil porque você pode mover páginas em um site, e todos os links que elas contêm para outras páginas não serão quebrados. Também é útil caso você mova seu site para um local diferente. Estes são alguns exemplos:

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

Se o site for http://myserver/myapp, veja como ASP.NET tratará esses caminhos quando a página for executada:

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

(Na verdade, você não verá esses caminhos como os valores da variável, mas ASP.NET tratará os caminhos como se fossem assim.)

Você pode usar o operador no código do ~ servidor (como acima) e na marcação, desta forma:

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

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

Na marcação, você usa o ~ operador para criar caminhos para recursos como arquivos de imagem, outras páginas da Web e arquivos CSS. Quando a página é executada, ASP.NET examina a página (código e marcação) e resolve todas as ~ referências ao caminho apropriado.

Lógica condicional e loops

ASP.NET código do servidor permite executar tarefas com base em condições e escrever código que repete instruções um número específico de vezes, ou seja, código que executa um loop).

Condições de teste

Para testar uma condição simples, use a If...Then instrução , que retorna True ou False com base em um teste que você especificar:

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

O If palavra-chave inicia um bloco. O teste real (condição) segue o If palavra-chave e retorna true ou false. A If instrução termina com Then. As instruções que serão executadas se o teste for true serão colocadas por If e End If. Uma If instrução pode incluir um Else bloco que especifica instruções a serem executadas se a condição for falsa:

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

Se uma instrução If iniciar um bloco de código, você não precisará usar as instruções normais Code...End Code para incluir os blocos. Basta adicionar @ ao bloco e ele funcionará. Essa abordagem funciona com If outras palavras-chave de programação do Visual Basic que são seguidas por blocos de código, incluindo For, For Each, Do Whileetc.

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

Você pode adicionar várias condições usando um ou mais ElseIf blocos:

@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

Neste exemplo, se a primeira condição no If bloco não for verdadeira, a ElseIf condição será verificada. Se essa condição for atendida, as instruções no ElseIf bloco serão executadas. Se nenhuma das condições for atendida, as instruções no Else bloco serão executadas. Você pode adicionar qualquer número de ElseIf blocos e fechar com um Else bloco como a condição "todo o resto".

Para testar um grande número de condições, use um Select Case bloco:

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

O valor a ser testado está entre parênteses (no exemplo, a variável de dia da semana). Cada teste individual usa uma Case instrução que lista um valor. Se o valor de uma Case instrução corresponder ao valor de teste, o código nesse Case bloco será executado.

O resultado dos dois últimos blocos condicionais exibidos em um navegador:

Razor-Img10

Código de loop

Muitas vezes, você precisa executar as mesmas instruções repetidamente. Faça isso fazendo looping. Por exemplo, geralmente você executa as mesmas instruções para cada item em uma coleção de dados. Se você souber exatamente quantas vezes deseja fazer loop, poderá usar um For loop. Esse tipo de loop é especialmente útil para contar para cima ou para baixo:

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

O loop começa com o For palavra-chave, seguido por três elementos:

  • Imediatamente após a instrução For , você declara uma variável de contador (não é necessário usar Dim) e, em seguida, indica o intervalo, como em i = 10 to 20. Isso significa que a variável i começará a contar em 10 e continuará até chegar a 20 (inclusive).
  • Entre as For instruções e Next é o conteúdo do bloco. Isso pode conter uma ou mais instruções de código que são executadas com cada loop.
  • A Next i instrução encerra o loop. Ele incrementa o contador e inicia a próxima iteração do loop.

A linha de código entre as For linhas e Next contém o código que é executado para cada iteração do loop. A marcação cria um novo parágrafo (<p> elemento) cada vez e adiciona uma linha à saída, exibindo o valor de i (o contador). Quando você executa essa página, o exemplo cria 11 linhas exibindo a saída, com o texto em cada linha indicando o número do item.

Razor-Img11

Se você estiver trabalhando com uma coleção ou matriz, geralmente usará um For Each loop. Uma coleção é um grupo de objetos semelhantes e o For Each loop permite realizar uma tarefa em cada item da coleção. Esse tipo de loop é conveniente para coleções, pois ao contrário de um For loop, você não precisa incrementar o contador nem definir um limite. Em vez disso, o código de For Each loop simplesmente prossegue pela coleção até que ela seja concluída.

Este exemplo retorna os itens da Request.ServerVariables coleção (que contém informações sobre o servidor Web). Ele usa um For Each loop para exibir o nome de cada item criando um novo <li> elemento em uma lista com marcadores HTML.

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

O For Each palavra-chave é seguido por uma variável que representa um único item na coleção (no exemplo, myItem), seguido pelo In palavra-chave, seguido pela coleção pela qual você deseja executar um loop. No corpo do For Each loop, você pode acessar o item atual usando a variável declarada anteriormente.

Razor-Img12

Para criar um loop de finalidade mais geral, use a instrução Do While :

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

Esse loop começa com o Do While palavra-chave, seguido por uma condição, seguido pelo bloco a ser repetido. Loops normalmente incrementam (adicionar a) ou decrementam (subtrair de) uma variável ou objeto usado para contagem. No exemplo, o += operador adiciona 1 ao valor de uma variável sempre que o loop é executado. (Para diminuir uma variável em um loop que conta para baixo, você usaria o operador -=de decremento .)

Objetos e coleções

Quase tudo em um site ASP.NET é um objeto, incluindo a própria página da Web. Esta seção discute alguns objetos importantes com os quais você trabalhará com frequência em seu código.

Objetos page

O objeto mais básico em ASP.NET é a página. Você pode acessar as propriedades do objeto de página diretamente sem nenhum objeto qualificado. O código a seguir obtém o caminho do arquivo da página, usando o Request objeto da página:

@Code
    Dim path = Request.FilePath
End Code

Você pode usar propriedades do Page objeto para obter muitas informações, como:

  • Request. Como você já viu, esta é uma coleção de informações sobre a solicitação atual, incluindo que tipo de navegador fez a solicitação, a URL da página, a identidade do usuário etc.

  • Response. Esta é uma coleção de informações sobre a resposta (página) que será enviada ao navegador quando o código do servidor terminar de ser executado. Por exemplo, você pode usar essa propriedade para gravar informações na resposta.

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

Objetos de coleção (matrizes e dicionários)

Uma coleção é um grupo de objetos do mesmo tipo, como uma coleção de Customer objetos de um banco de dados. ASP.NET contém muitas coleções internas, como a Request.Files coleção .

Geralmente, você trabalhará com dados em coleções. Dois tipos de coleção comuns são a matriz e o dicionário. Uma matriz é útil quando você deseja armazenar uma coleção de itens semelhantes, mas não deseja criar uma variável separada para manter cada item:

<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

Com matrizes, você declara um tipo de dados específico, como String, Integerou DateTime. Para indicar que a variável pode conter uma matriz, adicione parênteses ao nome da variável na declaração (como Dim myVar() As String). Você pode acessar itens em uma matriz usando sua posição (índice) ou usando a instrução For Each . Índices de matriz são baseados em zero — ou seja, o primeiro item está na posição 0, o segundo item está na posição 1 e assim por diante.

@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

Você pode determinar o número de itens em uma matriz obtendo sua Length propriedade. Para obter a posição de um item específico na matriz (ou seja, para pesquisar a matriz), use o Array.IndexOf método . Você também pode fazer coisas como inverter o conteúdo de uma matriz (o Array.Reverse método) ou classificar o conteúdo (o Array.Sort método ).

A saída do código da matriz de cadeia de caracteres exibida em um navegador:

Razor-Img13

Um dicionário é uma coleção de pares chave/valor, em que você fornece a chave (ou nome) para definir ou recuperar o valor correspondente:

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

Para criar um dicionário, use o New palavra-chave para indicar que está criando um novo Dictionary objeto. Você pode atribuir um dicionário a uma variável usando o Dim palavra-chave. Você indica os tipos de dados dos itens no dicionário usando parênteses ( ( ) ). No final da declaração, você deve adicionar outro par de parênteses, pois esse é, na verdade, um método que cria um novo dicionário.

Para adicionar itens ao dicionário, você pode chamar o Add método da variável de dicionário (myScores nesse caso) e, em seguida, especificar uma chave e um valor. Como alternativa, você pode usar parênteses para indicar a chave e fazer uma atribuição simples, como no exemplo a seguir:

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

Para obter um valor do dicionário, especifique a chave entre parênteses:

@myScores("test4")

Métodos de chamada com parâmetros

Como você viu anteriormente neste artigo, os objetos com os quais você programa têm métodos. Por exemplo, um Database objeto pode ter um Database.Connect método . Muitos métodos também têm um ou mais parâmetros. Um parâmetro é um valor que você passa para um método para permitir que o método conclua sua tarefa. Por exemplo, examine uma declaração para o Request.MapPath método , que usa três parâmetros:

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

Esse método retorna o caminho físico no servidor que corresponde a um caminho virtual especificado. Os três parâmetros para o método são virtualPath, baseVirtualDire allowCrossAppMapping. (Observe que, na declaração, os parâmetros são listados com os tipos de dados dos dados que eles aceitarão.) Ao chamar esse método, você deve fornecer valores para todos os três parâmetros.

Ao usar o Visual Basic com a sintaxe Razor, você tem duas opções para passar parâmetros para um método: parâmetros posicionais ou parâmetros nomeados. Para chamar um método usando parâmetros posicionais, passe os parâmetros em uma ordem estrita especificada na declaração do método. (Normalmente, você conheceria essa ordem lendo a documentação do método.) Você deve seguir a ordem e não pode ignorar nenhum dos parâmetros , se necessário, passar uma cadeia de caracteres vazia ("") ou nula para um parâmetro posicional para o qual você não tem um valor.

O exemplo a seguir pressupõe que você tenha uma pasta chamada scripts em seu site. O código chama o Request.MapPath método e passa valores para os três parâmetros na ordem correta. Em seguida, ele exibe o caminho mapeado resultante.

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

Quando há muitos parâmetros para um método, você pode manter seu código mais limpo e mais legível usando parâmetros nomeados. Para chamar um método usando parâmetros nomeados, especifique o nome do parâmetro seguido por := e forneça o valor . Uma vantagem dos parâmetros nomeados é que você pode adicioná-los em qualquer ordem desejada. (Uma desvantagem é que a chamada de método não é tão compacta.)

O exemplo a seguir chama o mesmo método acima, mas usa parâmetros nomeados para fornecer os valores:

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

Como você pode ver, os parâmetros são passados em uma ordem diferente. No entanto, se você executar o exemplo anterior e este exemplo, eles retornarão o mesmo valor.

Manipulando erros

instruções Try-Catch

Muitas vezes, você terá instruções em seu código que podem falhar por motivos fora do controle. Por exemplo:

  • Se o código tentar abrir, criar, ler ou gravar um arquivo, todos os tipos de erros poderão ocorrer. O arquivo desejado pode não existir, ele pode estar bloqueado, o código pode não ter permissões e assim por diante.
  • Da mesma forma, se o código tentar atualizar registros em um banco de dados, poderá haver problemas de permissões, a conexão com o banco de dados poderá ser descartada, os dados a serem salvos poderão ser inválidos e assim por diante.

Em termos de programação, essas situações são chamadas de exceções. Se o código encontrar uma exceção, ele gerará (gerará) uma mensagem de erro que é, na melhor das hipóteses, irritante para os usuários.

Razor-Img14

Em situações em que seu código pode encontrar exceções e, para evitar mensagens de erro desse tipo, você pode usar Try/Catch instruções. Na instrução Try , você executa o código que está verificando. Em uma ou mais Catch instruções, você pode procurar erros específicos (tipos específicos de exceções) que possam ter ocorrido. Você pode incluir quantas Catch instruções precisar para procurar erros que esteja antecipando.

Observação

Recomendamos que você evite usar o Response.Redirect método em Try/Catch instruções , pois ele pode causar uma exceção em sua página.

O exemplo a seguir mostra uma página que cria um arquivo de texto na primeira solicitação e exibe um botão que permite que o usuário abra o arquivo. O exemplo usa deliberadamente um nome de arquivo inválido para causar uma exceção. O código inclui Catch instruções para duas exceções possíveis: FileNotFoundException, que ocorrerá se o nome do arquivo for inválido e DirectoryNotFoundException, que ocorrerá se ASP.NET não conseguir encontrar a pasta. (Você pode remover a marca de comentário de uma instrução no exemplo para ver como ela é executada quando tudo funciona corretamente.)

Se o código não manipulasse a exceção, você veria uma página de erro como a captura de tela anterior. No entanto, a Try/Catch seção ajuda a impedir que o usuário veja esses tipos de erros.

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

Recursos adicionais

Documentação de referência