web-dev-qa-db-fra.com

Comment définir une méthode dans Razor?

Comment définir une méthode dans Razor?

196
Rookian

Laissant seuls les débats sur quand (si jamais) cela devrait être fait, @ fonctions est comment vous le faites.

@functions {

    // Add code here.

}
286
David Ruttka

Vous voulez dire aide en ligne?

@helper SayHello(string name)
{
    <div>Hello @name</div>
}

@SayHello("John")
184
Darin Dimitrov

C'est très simple de définir une fonction dans un rasoir.

@functions {

    public static HtmlString OrderedList(IEnumerable<string> items)
    { }
}

Vous pouvez donc appeler la fonction n’importe où. Comme

@Functions.OrderedList(new[] { "Blue", "Red", "Green" })

Cependant, ce même travail peut également être effectué via helper. Par exemple

@helper OrderedList(IEnumerable<string> items){
    <ol>
        @foreach(var item in items){
            <li>@item</li>
        }
    </ol>
}

Alors, quelle est la difference?? Selon cette version précédente post , @helpers et @functions partagent un point commun: ils permettent de réutiliser du code dans les pages Web. Ils partagent également une autre chose en commun: ils se ressemblent au premier abord, ce qui pourrait créer une certaine confusion quant à leurs rôles. Cependant, ils ne sont pas les mêmes. Essentiellement, un assistant est un extrait réutilisable de Razor sytnax exposé en tant que méthode. Il est conçu pour restituer le code HTML au navigateur, alors qu'une fonction est une méthode d’utilité statique qui peut être appelée à partir de n’importe où dans votre application Pages Web. Le type de retour pour une aide est toujours HelperResult, alors que le type de retour pour une fonction est celui que vous souhaitiez.

24
gdmanandamohon

Vous pouvez aussi le faire avec un Func comme celui-ci

@{
    var getStyle = new Func<int, int, string>((width, margin) => string.Format("width: {0}px; margin: {1}px;", width, margin));
}

<div style="@getStyle(50, 2)"></div>
12
Bokoskokos

Razor est juste un moteur de template.

Vous devriez créer une classe régulière.

Si vous voulez créer une méthode dans une page Razor, mettez-la dans un @functions bloc .

9
SLaks

Vous pouvez aussi simplement utiliser le @{ } bloc pour créer des fonctions:

@{
    async Task<string> MyAsyncString(string input)
    {
        return Task.FromResult(input);
    }
}

Puis plus tard dans votre page de rasoir:

   <div>@(await MyAsyncString("weee").ConfigureAwait(false))</div>
0
Daniel