ASP.NET Core

【ASP.NET Core】razor内でメソッドやヘルパーを定義する方法

razor(.cshtml)ファイルで繰り返し使うhtmlの項目や、ほとんど一緒だけど一部の値だけ違う場合などがある場合にページ内でヘルパーを定義するとソースが少なく済みます。

また、ページ内でのみ使用するメソッドなどがあれば、メソッドをrazorファイルに定義することも可能です。

.NET FrameworkのMVCでは@helper{}で定義できていましたが、.NET Coreでは使えなかったため、使い方を調べてみました。

【検証環境】.NET 6 / ASP.NET Core MVC

メソッド、ヘルパーメソッドを定義

ヘルパーは@{} ブロックの中にvoidで定義します。

C#のコードを使いたい場合は、@の後に書くことで認識されます。

メソッドでは引数に応じたBootstrapのクラスを文字列で返す処理を定義してみます。

@*Helpers*@
@{ 
    void GenerateList(List<string> listItems, string style)
    {
        <ul> 
        @foreach(var listItem in listItems)
        {
            <li class="@style">@listItem</li>
        }
        </ul>
    }
    void GenerateBtn(string btnType)
    {
        <a class="btn @GetStyle(btnType)">
            @GetStyle(btnType)
        </a>
    }
}

@*Functions*@
@{
    string GetStyle(string btnType)
    {
        switch (btnType)
        {
            case "1":
                return "btn-primary";
            case "2":
                return "btn-danger";
            case "3":
                return "btn-warning";
            default:
                return "";
        }
    }
}

下記のように、@{}ブロックの中に書く形で呼び出します。

<div class="text-center">
    <h1 class="display-4">Welcome</h1>
    <p>Learn about <a href="https://docs.microsoft.com/aspnet/core">building Web apps with ASP.NET Core</a>.</p>
</div>
@{
    MyHelper(new List<string>() { "1", "2", "3" }, "class");
}

@{
    GenerateBtn("1");
    GenerateBtn("2");
    GenerateBtn("3");
}
エンジニアの転職ならこれ!

【第二新卒向け】マイナビジョブ20's

マイナビジョブ20'sは、20代・第二新卒・既卒向けの転職エージェントです。

▼こんな方におすすめ
・はじめて転職しようと思っている
・転職できるだけのスキルが自分にあるか不安
・手厚いサポートを受けたい

【フリーランス向け】 Midworks

Midworksは豊富な案件と「フリーランス」と「正社員」の良いとこ取りをした働き方を実現する手厚い保障が特徴です。

▼こんな方におすすめ
・現在正社員でフリーランスになろうか悩んでいる
・フリーランスとして働いているが、先行きが不安がある  (安定的な案件確保や保障など)
・自分の市場価値を知りたい、見合った案件で参画したい
・今後のキャリアビジョンを踏まえて案件を選びたい