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");
}
