Razorでメソッドを定義するにはどうすればよいですか?
(もしあれば)いつそれを行うべきかについての議論を残して、 @ functions はあなたがそれをする方法です。
@functions {
// Add code here.
}
インラインヘルパーのことですか?
@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>
}
それで、違いは何ですか??この以前の post によれば、@ helpersと@functionsの両方に共通点が1つあります。これらは、コードをWebページ内で再利用できるようにします。また、共通点もあります。一見同じように見えますが、これが彼らの役割について少し混乱を引き起こす可能性があります。ただし、それらは同じではありません。本質的に、ヘルパーはメソッドとして公開されるRazor sytnaxの再利用可能なスニペットであり、ブラウザーにHTMLをレンダリングすることを目的としていますが、関数はWebページアプリケーション内のどこからでも呼び出すことができる静的ユーティリティメソッドです。ヘルパーの戻り値の型は常にHelperResultですが、関数の戻り値の型は任意です。
このような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>
@{ }
ブロックを使用して関数を作成することもできます。
@{
async Task<string> MyAsyncString(string input)
{
return Task.FromResult(input);
}
}
その後、かみそりページで:
<div>@(await MyAsyncString("weee").ConfigureAwait(false))</div>