Réponses:
Laissant seuls les débats sur le moment où (si jamais) cela devrait être fait, @functions est la façon dont vous le faites.
@functions {
// Add code here.
}
@functions
est un bon endroit pour organiser l' affichage du code de génération spécifique .
Tu veux dire aide en ligne?
@helper SayHello(string name)
{
<div>Hello @name</div>
}
@SayHello("John")
Il est très simple de définir une fonction à l'intérieur du rasoir.
@functions {
public static HtmlString OrderedList(IEnumerable<string> items)
{ }
}
Vous pouvez donc appeler une fonction n'importe où. Comme
@Functions.OrderedList(new[] { "Blue", "Red", "Green" })
Cependant, ce même travail peut également être effectué helper
. Par exemple
@helper OrderedList(IEnumerable<string> items){
<ol>
@foreach(var item in items){
<li>@item</li>
}
</ol>
}
Alors, quelle est la difference?? Selon ce billet précédent, @helpers et @functions partagent une chose en commun: ils font de la réutilisation du code une possibilité dans les pages Web. Ils partagent également une autre chose en commun - ils se ressemblent à première vue, ce qui pourrait créer un peu de confusion dans leurs rôles. Mais ce ne sont pas les mêmes. En substance, un assistant est un extrait réutilisable de Razor sytnax exposé en tant que méthode, et est destiné au rendu HTML vers le navigateur, tandis qu'une fonction est une méthode utilitaire statique qui peut être appelée de n'importe où dans votre application Web Pages. Le type de retour pour une aide est toujours HelperResult, tandis que le type de retour pour une fonction est ce que vous voulez qu'elle soit.
@Functions
préfixe comme @OrderedList(...)
fonctionne pour moi dans .netcore.
Vous pouvez également 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>
Razor n'est qu'un moteur de modèles.
Vous devez créer une classe régulière.
Si vous voulez créer une méthode à l'intérieur d'une page Razor, mettez-les dans un @functions
bloc .
Vous pouvez simplement les déclarer en tant que fonctions locales dans un bloc de rasoir (ie @{}
).
@{
int Add(int x, int y)
{
return x + y;
}
}
<div class="container">
<p>
@Add(2, 5)
</p>
</div>
MyModelVm.cs
public class MyModelVm
{
public HttpStatusCode StatusCode { get; set; }
}
Index.cshtml
@model MyNamespace.MyModelVm
@functions
{
string GetErrorMessage()
{
var isNotFound = Model.StatusCode == HttpStatusCode.NotFound;
string errorMessage;
if (isNotFound)
{
errorMessage = Resources.NotFoundMessage;
}
else
{
errorMessage = Resources.GeneralErrorMessage
}
return errorMessage;
}
}
<div>
@GetErrorMessage()
</div>