回答:
実行する必要がある場合(ある場合)についての議論はそのままにして、@関数を使用して実行します。
@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の両方が1つの共通点を共有しています。これらは、コードをWebページ内で再利用できるようにするものです。彼らはまた、もう1つの共通点を共有しています。一見すると同じに見えますが、そのために役割に少し混乱が生じる可能性があります。ただし、同じではありません。本質的に、ヘルパーはメソッドとして公開されたRazor sytnaxの再利用可能なスニペットであり、ブラウザにHTMLをレンダリングすることを目的としていますが、関数はWebページアプリケーション内のどこからでも呼び出すことができる静的ユーティリティメソッドです。ヘルパーの戻り値の型は常にHelperResultですが、関数の戻り値の型は任意です。
@Functions
接頭辞を省略して関数を呼び出す@OrderedList(...)
。
かみそりブロックでローカル関数として宣言することができます(つまり@{}
)。
@{
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>