Saltar al contenido

Artículos, tutoriales, trucos, curiosidades, reflexiones y links sobre programación web ASP.NET Core, MVC, Blazor, SignalR, Entity Framework, C#, Azure, Javascript... y lo que venga ;)

18 años online

el blog de José M. Aguilar

Inicio El autor Contactar

Artículos, tutoriales, trucos, curiosidades, reflexiones y links sobre programación web
ASP.NET Core, MVC, Blazor, SignalR, Entity Framework, C#, Azure, Javascript...

¡Microsoft MVP!
martes, 31 de mayo de 2011
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.

Archivos de vistas o páginas Razor

C#VB.NET
nombrearchivo.cshtmlnombrearchivo.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.NombreHola, @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 este mismo post.

Publicado en: Variable not found.

5 Comentarios:

Ernesto dijo...

Muy util la verdad, es una lastima como es dificil encontrar recursos y referencias para VB.Net, con lo amigable y bonito que se ve...

Ahora que si hubiera una forma para tener vista de diseño con Razor... ya seria lo maximo!

josé M. Aguilar dijo...

Hola, Ernesto!

La verdad es que sí, que en estos temas VB.NET anda un poco marginado. Ya lo de "bonito" es más discutible ;-DDD

Y en cuanto a la vista diseño, no sé si le llegarán a incluir algún día: en las vistas MVC hay tanto código (bucles, salida de expresiones...) que no sé si tendría sentido; es diferente a Webforms, donde cada control podía ser representado en vista diseño.

Un saludo y gracias por comentar!

Eduard Tomàs dijo...

Buenas! xD
Interesante, al menos como referencia, porque como bien decís, no hay apenas info sobre la sintaxis Razor en VB (que a mi, contradiciendo a Ernesto, la encuentro de todo menos bonita y amigable :P).

Y un apunte sobre la vista de diseño: Yo creo que esa es una de las grandes falacias del desarrollo web. En webforms hay vista de diseño, vale. Pero de lo que uno ve en la visa de diseño a lo que termina saliendo en el navegador, muchas veces, media un abismo. Y además: que motor usa la vista de diseño? En VS se ve de una manera y en Chrome de otra :S (y eso mismo es aplicable a los diseñadores html puros tipo Dreamweaver).
En el fondo ya hay una vista de diseño: se llama navegador e ir pulsando F5... :P

De todos modos si que estaría bien que VS pudiese hacer algo parecido a lo que hace Blend en WPF: Crear objetos del modelo de una vista y ejecutar el código Razor para terminar representando el HTML. Aunque el dia que los de MS hagan esto, lo implementarán en otro producto, por eso de mantener los roles separados y tal (y de paso cobrar otra licencia... uy, no. Eso no :P).

Saludos xD

BEXIANO dijo...

GRACIAS AMIGO, ME GUSTA MAS LA SINTAXIS DE VISUAL BASIC...., ODIO LA DIFERENCIA ENTRE MAYUSCULA Y MINISCULA DE C SHARP....

jhonny dijo...

Muy buen articulo Jose M. Aguilar, espero poder aplicar esto en proyectos nuevos que estoy empezando.