Respuestas:
Dejando en paz cualquier debate sobre cuándo (si alguna vez) debería hacerse, @functions es cómo lo hace.
@functions {
// Add code here.
}
@functions
es un buen lugar para organizar ver código de generación específico . Caso en cuestión: esas plantillas de cliente feas de cadenas ..
¿Te refieres a ayuda en línea?
@helper SayHello(string name)
{
<div>Hello @name</div>
}
@SayHello("John")
Es muy simple definir una función dentro de la maquinilla de afeitar.
@functions {
public static HtmlString OrderedList(IEnumerable<string> items)
{ }
}
Entonces puede llamar a la función en cualquier lugar. Me gusta
@Functions.OrderedList(new[] { "Blue", "Red", "Green" })
Sin embargo, este mismo trabajo también se puede hacer helper
. Como ejemplo
@helper OrderedList(IEnumerable<string> items){
<ol>
@foreach(var item in items){
<li>@item</li>
}
</ol>
}
¿¿Entonces cuál es la diferencia?? Según esta publicación anterior, tanto @helpers como @functions comparten una cosa en común: hacen posible la reutilización de códigos dentro de las páginas web. También comparten otra cosa en común: se ven iguales a primera vista, que es lo que podría causar un poco de confusión sobre sus roles. Sin embargo, no son lo mismo. En esencia, un ayudante es un fragmento reutilizable de la sintaxis Razor expuesta como método, y está destinado a representar HTML en el navegador, mientras que una función es un método de utilidad estático que se puede llamar desde cualquier lugar dentro de la aplicación de páginas web. El tipo de retorno para un ayudante es siempre HelperResult, mientras que el tipo de retorno para una función es lo que usted quiera que sea.
@Functions
prefijo como @OrderedList(...)
funciona para mí en .netcore.
También puedes hacerlo con un 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>
Razor es solo un motor de plantillas.
Deberías crear una clase regular.
Si desea crear un método dentro de una página Razor, colóquelos en un @functions
bloque .
Simplemente puede declararlos como funciones locales en un bloque de afeitar (es decir @{}
).
@{
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>