Відповіді:
Залишаючи в спокої будь-які дебати, коли (якщо і колись) це слід робити, @functions - це, як ви це робите.
@functions {
// Add code here.
}
@functions
є гарним місцем для організації перегляду конкретного коду генерації. Справа в
Ви маєте на увазі вбудованого помічника?
@helper SayHello(string name)
{
<div>Hello @name</div>
}
@SayHello("John")
Дуже просто визначити функцію всередині бритви.
@functions {
public static HtmlString OrderedList(IEnumerable<string> items)
{ }
}
Таким чином, ви можете викликати функцію в будь-якому місці. Подібно до
@Functions.OrderedList(new[] { "Blue", "Red", "Green" })
Однак цю ж роботу можна зробити і через helper
. Як приклад
@helper OrderedList(IEnumerable<string> items){
<ol>
@foreach(var item in items){
<li>@item</li>
}
</ol>
}
То в чому різниця ?? Згідно з цим попереднього повідомленням обидва @helpers і @Functions ділимося одне спільне - вони роблять код повторного використання можливості в веб - сторінки. Вони також поділяють ще одне спільне - на перший погляд вони виглядають однаково, саме це може викликати трохи плутанини щодо їх ролей. Однак вони не однакові. По суті, помічник - фрагмент багаторазового використання синтаксису Razor, що піддається впливу, і призначений для надання HTML-браузеру, тоді як функцією є метод статичної утиліти, який можна викликати з будь-якого місця вашої програми веб-сторінок. Тип повернення для помічника - це завжди HelperResult, тоді як тип повернення для функції - це все, що ви хочете.
@Functions
префікс, як @OrderedList(...)
працює для мене в .netcore.
Ви також можете зробити це з таким функцією
@{
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, покладіть їх у @functions
блок .
Ви можете просто оголосити їх як локальні функції в блоці бритви (тобто @{}
).
@{
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>