Как определить метод в Razor? - PullRequest
196 голосов
/ 01 марта 2011

Как определить метод в Razor?

Ответы [ 6 ]

286 голосов
/ 01 марта 2011

Оставляя в покое любые споры, когда (если вообще когда-либо) это должно быть сделано, @ functions - это то, как вы это делаете.

@functions {

    // Add code here.

}
183 голосов
/ 01 марта 2011

Вы имеете в виду встроенный помощник?

@helper SayHello(string name)
{
    <div>Hello @name</div>
}

@SayHello("John")
24 голосов
/ 23 марта 2017

Очень просто определить функцию внутри бритвы.

@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, тогда как тип возвращаемого значения для функции - то, что вы хотите, чтобы оно было.

12 голосов
/ 23 сентября 2015

Вы также можете сделать это с помощью 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>
9 голосов
/ 01 марта 2011

Razor - это просто движок шаблонов.

Вы должны создать обычный класс.

Если вы хотите создать метод внутри страницы Razor, поместите их в @functions блок .

0 голосов
/ 10 июля 2019

Вы также можете просто использовать блок @{ } для создания функций:

@{
    async Task<string> MyAsyncString(string input)
    {
        return Task.FromResult(input);
    }
}

Затем на вашей странице бритвы:

   <div>@(await MyAsyncString("weee").ConfigureAwait(false))</div>
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...