Ответы:
Оставляя в покое любые споры о том, когда (если когда-либо) это должно быть сделано, @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 sytnax, представленный в виде метода и предназначенный для визуализации HTML в браузере, тогда как функция - это статический служебный метод, который можно вызывать из любого места в приложении веб-страниц. Тип возвращаемого значения для помощника всегда HelperResult, тогда как тип возвращаемого значения для функции - то, что вы хотите, чтобы это было.
@Functions
префикса, как @OrderedList(...)
у меня работает в .netcore.
Вы также можете сделать это с Func, как это
@{
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>