Tutorial Razor - Partie 1

A la découverte de la syntaxe de Razor
Introduction
Avec le lancement de WebMatrix et l'arrivée de Razor comme View Engine dans ASP.NET MVC, j'ai décidé de m'intéresser à ce nouveau langage pour l'embarquer dans un CMS Open Source que je suis en train de développer (j'en reparlerai plus tard dans ce blog).

C'est donc l'occasion pour moi de rédiger un petit résumé de la syntaxe de Razor.

Principes de base
Tous les blocs de codes doivent être encadrés par @{ ... } . Dès que vous tapez un @, vous êtes censé démarrer l'écriture d'un bout de code. Tout ce qui suit est donc considéré comme du code, sauf si vous indiquez le contraire à Razor.

@{
    var numbers = Enumerable.Range(1, 10);
    foreach(var number in numbers){
   }
}

Si vous voulez afficher le contenu de la variable number à l'intérieur de la boucle, vous devez la préfixer par un @ :

@{
    var numbers = Enumerable.Range(1, 10);
    foreach(var number in numbers){
           @number
    }
}

Si vous voulez afficher le résultat d'une expression sur une seule ligne, vous devez à nouveau l'encapsuler dans la séquence @( ... ) :

@{
    var numbers = Enumerable.Range(1, 10);
    foreach(var number in numbers){
        @(number * 10)
    }
}

Si vous voulez mixer des variables avec du texte non-interprété dans un bloc de code, Razor offre 3 manières de procéder. La première, si l'élément à concaténer est de type texte, consite à le préfixer par @:

@{
    var numbers = Enumerable.Range(1, 10);
    foreach(var number in numbers){
        @(number * 10)@: 
    }
}

Vous pouvez utiliser la séquence @: plusieurs fois sur une même ligne :

@{
    var numbers = Enumerable.Range(1, 10);
    foreach(var number in numbers){
        @(number * 10)@: * 10 = @(number * 10)
    }
}

Razor détecte également automatiquement les balises HTML :

@{
    var numbers = Enumerable.Range(1, 10);
    foreach(var number in numbers){
        <span>@(number * 10)&nbsp;</span>
    }
}


@{
    var numbers = Enumerable.Range(1, 10);
    foreach(var number in numbers){
        @(number * 10)<br />
    }
}

Si vous ne voulez pas que les balises HTML soient interprétées, vous pouvez les encapsuler dans un élément <TEXT> :

@{
    var numbers = Enumerable.Range(1, 10);
    foreach(var number in numbers){
        <text>@(number * 10) * 10 = @(number * 10)&nbsp;</text>
    }
}

Conclusion
Pour terminer, voici encore quelques exemples d'itérations et conditions :

@foreach(var number in numbers){
    @number
}


@for(var i = 0, i < numbers.Count(); i++){
    @numbers.ElementAt(i)
}


@if(numbers.Count() == 10){
    @:10 Numbers - Good!
}


@{var condition = 1; var message = ""}


@switch(condition){
    case: 1
        message = "Case 1";
        break;
    case: 2
        message = "Case 2";
        break;
    case: 3
        message = "Case 3";
        break;
    default:
        message = "Default Case";
        break;
}


@message

Commentaires