web-dev-qa-db-ja.com

いくつかのビューでの共有MVC Razor関数

私のビューには、いくつかのページで共有されている関数があります。

@functions 
{
    public HtmlString ModeImage(ModeEnum mode) 
    {
        switch(mode)
        {
            case AMode: new HtmlString("<img etc..."); break;
            // more etc...
        }
    }
}

別のファイルに入れて、コピーして各ページに貼り付ける必要なく、各ページに含める方法はありますか。 .csファイルを作成してページごとにアクセスできることはわかっていますが、関数はビューに関係しているため、この関数が変更された場合は再コンパイルする必要がありません。

34
kailoon

これは、スコットガスリーによるブログの投稿 ASP.NET MVC3およびRazor内の@helper構文 で説明されているRazor @helperメソッドが必要なようです。

これが概要です... "Razor内の@helper構文を使用すると、ビューテンプレート内に出力機能をカプセル化できる再利用可能なヘルパーメソッドを簡単に作成できます。これにより、コードの再利用が改善され、コードを読みやすくすることもできます。 "

21
Paige Cook

(これは、既存の回答のより詳細なバージョンです。)

MVCプロジェクトのルートにApp_Codeというフォルダーが存在しない場合は作成します。ここで、空のかみそりビューを作成し、任意の名前を付けます。

MVC project with Razor view called Shared.cshtml inside App_Code folder

必要に応じて、@helpersやstaticメソッドを追加します。

@helper ShowSomething()
{
    <span>Something</span>
}

@functions
{
    public static int CalculateSomething()
    {
        return 1;
    }
}

次に、最初に名前で共有ビューにアクセスして、ビューからそれらを使用します。

@Shared.ShowSomething()
@Shared.CalculateSomething()
39
Sam

静的ヘルパーページ を作成し、ページに通常のstaticメソッドを配置できます。
その後、どこでもPageName.MyMethod()と書いて呼び出すことができます。プロジェクトを再コンパイルする必要はないと私は思います。

4
SLaks