私のビューには、いくつかのページで共有されている関数があります。
@functions
{
public HtmlString ModeImage(ModeEnum mode)
{
switch(mode)
{
case AMode: new HtmlString("<img etc..."); break;
// more etc...
}
}
}
別のファイルに入れて、コピーして各ページに貼り付ける必要なく、各ページに含める方法はありますか。 .csファイルを作成してページごとにアクセスできることはわかっていますが、関数はビューに関係しているため、この関数が変更された場合は再コンパイルする必要がありません。
これは、スコットガスリーによるブログの投稿 ASP.NET MVC3およびRazor内の@helper構文 で説明されているRazor @helperメソッドが必要なようです。
これが概要です... "Razor内の@helper構文を使用すると、ビューテンプレート内に出力機能をカプセル化できる再利用可能なヘルパーメソッドを簡単に作成できます。これにより、コードの再利用が改善され、コードを読みやすくすることもできます。 "
(これは、既存の回答のより詳細なバージョンです。)
MVCプロジェクトのルートにApp_Code
というフォルダーが存在しない場合は作成します。ここで、空のかみそりビューを作成し、任意の名前を付けます。
必要に応じて、@helper
sやstatic
メソッドを追加します。
@helper ShowSomething()
{
<span>Something</span>
}
@functions
{
public static int CalculateSomething()
{
return 1;
}
}
次に、最初に名前で共有ビューにアクセスして、ビューからそれらを使用します。
@Shared.ShowSomething()
@Shared.CalculateSomething()
静的ヘルパーページ を作成し、ページに通常のstatic
メソッドを配置できます。
その後、どこでもPageName.MyMethod()
と書いて呼び出すことができます。プロジェクトを再コンパイルする必要はないと私は思います。