Sintaxis Razor con VB.NET

Desde siempre, C# ha sido el lenguaje por excelencia del framework ASP.NET MVC, y por esta razón es bastante difícil encontrar en la web ejemplos escritos en otros lenguajes, como el popular Visual Basic .NET.

En el caso concreto de la capa Vista, prácticamente nadie escribe ejemplos utilizando Razor y VB.NET, por lo que los desarrolladores que siguen optando por este lenguage para trabajar sobre ASP.NET MVC (e incluso WebPages) lo tienen más complicado para entender y utilizar código existente. Además, a diferencia de lo que podría pensarse, la codificación no es exactamente igual en ambos lenguajes, y a veces no es fácilmente inferible, lo cual añade además un poco de dificultad al usar VB.

En este post vamos a mostrar una tabla de equivalencias entre C# y VB.NET a la hora de codificar distintas construcciones que utilizamos frecuentemente al crear vistas con Razor.

Disculpad el formato, no he conseguido poner la tabla bonita en geeks.ms; en cualquier caso, la podéis encontrar bastante más legible en el post original en Variable not found.

Archivos de vistas o páginas Razor

C# VB.NET
nombrearchivo.cshtml nombrearchivo.vbhtml

Definición del tipo de datos del Modelo

C# VB.NET
@model Persona @ModelType Persona

Importación de espacios de nombres

C# VB.NET
@using MyApp.Models @Imports MyApp.Models

Definición de clase base de la vista

C# VB.NET
@inherits ClaseBase @Inherits ClaseBase

Bloque de código

C# VB.NET
@{
   // Código C#
}
@Code
   ‘ Código VB.NET
End Code

Instrucciones de bloque (*)

C# VB.NET
@if(a > b) {
   // Hacer algo
}
@If a > b Then
   ‘ Hacer algo
End If

(*) aplicable para instrucciones como if, while, for, foreach, using, switch, etc.

Salida de expresión

C# VB.NET
Hola, @Model.Nombre Hola, @Model.Nombre

Mezcla de código y marcado

C# VB.NET
@if(a > b) { 
   <p>A es mayor que B</p>
}
@If a > b Then
   @<p>A es mayor que B</p>
End If
@if(a > b) {
   @: una línea de texto o HTML
}
@If a > b Then
   @: una línea de texto o HTML
End If
@if(a > b) {
   <text>
      Aquí va texto o HTML
   </text>
}
@If a > b Then
   @<text>
      Aquí va texto o HTML
   </text>
End If

Definición de secciones de un Layout

C# VB.NET
@section Encabezado {
   <h3>Este es el encabezado</h3>
} 
@Section Encabezado
   <h3>Este es el encabezado</h3>
End Section

Creación de helpers

C# VB.NET
@helper Tabla(int num) {
   <ul>
   @for (int i = 1; i < 11; i++)
   {
      <li>@num x @i = @(num*i) </li>
   }
   </ul>
}
@Helper Tabla(num As Integer)
   @:<ul>
   For i = 1 To 10
      @<li>@num x @i = @(num * i) </li>
   Next
   @:</ul>
End Helper

Bloques de funciones

C# VB.NET
@functions {
    int suma(int a, int b)
    {
        return a + b;
    }
}
@Functions
    Function suma(a As Integer,
                  b As Integer) As Integer
        Return a + b
    End Function
End Functions

Razor templated delegates

C# VB.NET
@{
    Func<dynamic, object> bold =
        @<strong>@item</strong>;
}

Uso: @bold(«Esto en negrilla»)

@Code
   Dim bold =
      Function(item As Object)
         @<strong>@item</strong>
      End Function
End code

Uso: @bold(«Esto en negrilla»)

@helper Lista(
   Func<dynamic, HelperResult> templ,
   params dynamic[] args)
{
    foreach(dynamic item in args)
    {
        @templ(item)
    }
}

Uso:
<ul>
   @Lista(@<li>@item</li>,
          1, 2, 3.5, «hola»,
          DateTime.Now)
</ul>

@Helper Lista(templ
    As Func(Of Object, HelperResult),
    ParamArray args() As Object)

   For Each item In args
      @templ(item)
   Next
End helper

Uso:
<ul>
   @Lista(Function(item As Object)
            @<li>@item</li>
          End Function,
          1, 2, 3.5, «hola»,
          DateTime.Now)
</ul>

Espero que no se me haya quedado por detrás ninguna de las construcciones habituales. De todas formas, si detectáis alguna ausencia, no dudéis en avisarme y lo incluyo en el post original en Variable not found

Deja un comentario

Tu dirección de correo electrónico no será publicada. Los campos obligatorios están marcados con *