TOC

This article has been localized into French by the community.

Razor:

Fonctions locales

Dans un article précédent, nous avons parlé de comment Razor vous permettait de définir un bloc de code dans vos vues, comme ceci :

@{
    // C# code goes here...
    // As many lines as you want!
}

Vous pouvez utiliser ces blocs de code pour à peu près tout ce que C# est capable de faire - vous pouvez même définir des fonctions locales ! C'est très utile, car une fonction Razor locale vous permet d'inclure des balises, permettant ainsi de créer des petites fonctions de template. Ceci est utile dans nombre de situations, comme on peut le voir dans le prochain exemple, où nous avons besoin de générer plusieurs fois le même bout de balisage. Définir une fonction locale est tout comme définir une méthode de classe, à la différence qu'une fonction locale n'a pas de modificateur d'accès (public, private, etc.). Voici à quoi cela pourrait ressembler :

@{
    void RenderUserInfo(HelloMVCWorld.Models.WebUser user)
    {
<div class="user-info">
    @user.LastName, @user.FirstName [@user.Birthday.ToShortDateString()]
</div>
    }
}

Notez comment Razor vous permet d'élégamment combiner du code en C# et de l'HTML. Cet exemple est volontairement gardé simple, du point de vue du balisage, mais cela peut être aussi complexe que vous en avez besoin.

Voici un exemple complet de comment vous pouvez définir et utiliser cette fonction locale :

@model List<HelloMVCWorld.Models.WebUser>
@{
    ViewData["Title"] = "Functions";
}

<h1>Functions</h1>

@{
    void RenderUserInfo(HelloMVCWorld.Models.WebUser user)
    {
<div class="user-info">
    @user.LastName, @user.FirstName [@user.Birthday.ToShortDateString()]
</div>
    }

    <h2>Users [sorted by first name]</h2>
    foreach(var user in Model.OrderBy(x => x.FirstName))
    {
RenderUserInfo(user);
    }

    <h2>Users [sorted by last name]</h2>
    foreach(var user in Model.OrderBy(x => x.LastName))
    {
RenderUserInfo(user);
    }
}

Grâce à la fonction locale (RenderUserInfo), nous pouvons à présent afficher la même liste deux fois, avec triée différemment et sans avoir à réécrire les mêmes balises une deuxième fois.

Fonctions locales avec une valeur retournée

Vous pouvez vous rendre compte que RenderUserInfo() ne retourne rien (elle est déclarée avec void comme valeur de retour), mais ce n'est pas obligatoirement ainsi. Votre fonction Razor locale peut facilement retourner une valeur, comme une fonction/méthode C# classique. Cela peut être utile dans plusieurs situations, par exemple quand vous voulez faire un calcul complexe à plusieurs endroits de votre code. Voici un exemple :

@{ 
    int GetTheAnswerToLifeTheUniverseEverything(int x, int y)
    {
return x * y;
    }
}
<div>
    The answer to life, the universe and everything: @GetTheAnswerToLifeTheUniverseEverything(7, 6)
</div>

Bien sûr ce n'est qu'un exemple de démonstration, normalement la fonction ferait quelque chose de plus intéressant et complexe qu'une simple multiplication, mais ça devrait démontrer à quel point il est simple de définir et utiliser une fonction locale qui retourne une valeur. Voilà ce que ça affiche :

<div>
    The answer to life, the universe and everything: 42
</div>

Résumé

Les fonctions Razor locales permettent de facilement définir des fonctions pouvant être utilisées dans la Vue actuelle, par exemple pour effectuer la même action plusieurs fois ou pour être utilisées comme template.


This article has been fully translated into the following languages: Is your preferred language not on the list? Click here to help us translate this article into your language!