web-dev-qa-db-ja.com

Razorでメソッドを定義するにはどうすればよいですか?

Razorでメソッドを定義するにはどうすればよいですか?

196
Rookian

(もしあれば)いつそれを行うべきかについての議論を残して、 @ functions はあなたがそれをする方法です。

@functions {

    // Add code here.

}
286
David Ruttka

インラインヘルパーのことですか?

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

@SayHello("John")
184
Darin Dimitrov

カミソリ内で関数を定義するのは非常に簡単です。

@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>
}

それで、違いは何ですか??この以前の post によれば、@ helpersと@functionsの両方に共通点が1つあります。これらは、コードをWebページ内で再利用できるようにします。また、共通点もあります。一見同じように見えますが、これが彼らの役割について少し混乱を引き起こす可能性があります。ただし、それらは同じではありません。本質的に、ヘルパーはメソッドとして公開されるRazor sytnaxの再利用可能なスニペットであり、ブラウザーにHTMLをレンダリングすることを目的としていますが、関数はWebページアプリケーション内のどこからでも呼び出すことができる静的ユーティリティメソッドです。ヘルパーの戻り値の型は常にHelperResultですが、関数の戻り値の型は任意です。

24
gdmanandamohon

このような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>
12
Bokoskokos

Razorは単なるテンプレートエンジンです。

通常のクラスを作成する必要があります。

Razorページ内でメソッドを作成する場合は、それらを @functionsブロック に入れます。

9
SLaks

@{ }ブロックを使用して関数を作成することもできます。

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

その後、かみそりページで:

   <div>@(await MyAsyncString("weee").ConfigureAwait(false))</div>
0
Daniel