カスタムHtmlヘルパーとカスタムタグヘルパーはどちらを使うべきか(ASP.NET CORE 6 MVC)

概要

ASP.NET CORE MVCからカスタムタグヘルパーが使えるようになった。
ASP.NET Framework4 MVC5にあったカスタムHtmlヘルパーも引き続き使える。
ではどっちを使えばよいかというと、.NET Framework4からの移行プロジェクトであれば、既存のカスタムHtmlヘルパーをそのまま使えばよい(.NET CORE用に修正は必要。カスタムHTMLヘルパーの移行を参照のこと)。
ASP.NET CORE で新規にプロジェクトを作成する場合は、カスタムタグヘルパーのほうができることは多い。
カスタムタグヘルパーはカスタムHtmlヘルパーの代わりとして使うことができる。
それに加え、カスタムタグヘルパーはタグとして記述するため、タグのコンテント(タグとタグに囲まれた値、InnerHtml)を使うことができる。
また、カスタムHtmlヘルパーがstatic classだったのに対して、カスタムタグヘルパーはインスタンスを生成する。DIにも対応しているためテストがやりやすい。
カスタムタグヘルパーの作成やタグの出力は、カスタムタグヘルパーの色々な出力方法を参照のこと。

カスタムHtmlヘルパーの注意点

カスタムHtmlヘルパーは、IHtmlHelperクラスの拡張メソッドとして定義される。
そうすることで、cshtml上で、@Html.xxxx という形でカスタムHtmlヘルパーを呼び出すことができる。
例えば、ZipNoTextHelperというカスタムHtmlヘルパーを作成し、ZipNoTextというメソッドを用意する場合、以下のようにthisでIHtmlHelperを記載する。

public static IHtmlContent ZipNoText(
        this IHtmlHelper helper,
        string zipNoFlont,
        string zipNoRear)
{
    //・・・省略
}

これを忘れると@Html.ZipNoText(“331”, “0001”) という形で参照できない。
もしカスタムHtmlヘルパーが@Htmlで参照できない場合はthisを確認してみるとよい。