回答:
@helper Razorディレクティブを使用できます。
@helper WelcomeMessage(string username)
{
<p>Welcome, @username.</p>
}
次に、次のように呼び出します。
@WelcomeMessage("John Smith")
その関数をcshtmlファイル内で宣言しないのはなぜですか?
@functions{
public string GetSomeString(){
return string.Empty;
}
}
<h2>index</h2>
@GetSomeString()
functions
に重点を置いているように見えるため、このソリューションはtoherの戻り値型により多くの柔軟性を提供します。私の本ではどちらの回答も+1になりますが、どちらも役立つ情報です。
<p>Welcome, @username.</p>
対return new HtmlString("<p>Welcome, " + Html.Encode(username) + ".</p>");
。
@helper
、単一のビューでは、しかし、他のビューが使用できるようにしていません。@helperの方が好きな理由は、中括弧の間にhtmlを挿入できるからです。 @functions
(簡単に)それをさせません。
@helper
と@functions
は両方とも多くのビューで共有でき、両方を宣言して単一のビューで使用できます(私は個人的に両方の共有/単一シナリオでの使用を見つけました)。それらの間の唯一の実用的な違いは、ビューヘルパーがレンダリングされたHTMLスニペット(またはより適切なHelperResult
インスタンス)を返すための構文糖を追加するという事実ですが、ビュー関数は通常、単純な参照型または値型を返す場合にのみ役立ちます。
メソッドがhtmlを返す必要がなく、他に何かをする必要がある場合は、Razorのヘルパーメソッドの代わりにラムダを使用できます。
@{
ViewBag.Title = "Index";
Layout = "~/Views/Shared/_Layout.cshtml";
Func<int,int,int> Sum = (a, b) => a + b;
}
<h2>Index</h2>
@Sum(3,4)
宣言的なかみそりヘルパーを見てください
ページのグローバル変数にアクセスする場合は、次のようにできます。
@{
ViewData["Title"] = "Home Page";
var LoadingButtons = Model.ToDictionary(person => person, person => false);
string GetLoadingState (string person) => LoadingButtons[person] ? "is-loading" : string.Empty;
}
GetLoadingState()
これがローカル関数です。
@functions
メソッド内にタグを置くことはできないので、この答えが好きです。