Respostas:
Deixando sozinho qualquer debate sobre quando (se alguma vez) deve ser feito, o @functions é como você o faz.
@functions {
// Add code here.
}
@functions
é um bom lugar para organizar a exibição de código de geração específico . Caso em questão: aqueles feio cliente modelos de-cordas ..
Você quer dizer auxiliar em linha?
@helper SayHello(string name)
{
<div>Hello @name</div>
}
@SayHello("John")
É muito simples definir uma função dentro do barbeador.
@functions {
public static HtmlString OrderedList(IEnumerable<string> items)
{ }
}
Então você pode chamar uma função em qualquer lugar. Gostar
@Functions.OrderedList(new[] { "Blue", "Red", "Green" })
No entanto, esse mesmo trabalho também pode ser feito helper
. Como um exemplo
@helper OrderedList(IEnumerable<string> items){
<ol>
@foreach(var item in items){
<li>@item</li>
}
</ol>
}
Então qual é a diferença?? De acordo com este post anterior, @helpers e @functions compartilham uma coisa em comum - eles tornam a reutilização de código uma possibilidade nas Páginas da Web. Eles também compartilham outra coisa em comum - eles parecem iguais à primeira vista, o que pode causar um pouco de confusão sobre seus papéis. No entanto, eles não são os mesmos. Em essência, um auxiliar é um snippet reutilizável do Razor sytnax exposto como método e destina-se à renderização de HTML para o navegador, enquanto uma função é um método de utilitário estático que pode ser chamado de qualquer lugar no aplicativo Web Pages. O tipo de retorno para um auxiliar é sempre HelperResult, enquanto o tipo de retorno para uma função é o que você deseja que seja.
@Functions
prefixo, como @OrderedList(...)
funciona para mim no .netcore.
Você também pode fazê-lo com um Func como este
@{
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>
O Razor é apenas um mecanismo de modelagem.
Você deve criar uma classe regular.
Se você deseja criar um método dentro de uma página do Razor, coloque-os em um @functions
bloco .
Você pode simplesmente declará-las como funções locais em um bloco de barbear (ou seja @{}
).
@{
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>