ASP.NET 6 Core MVC移行がらみのTips

コントローラーまわり

PRGパターンのために、ModelStateやViewDataを持ち回りたい(ASP.NET 6 CORE MVC)

PRG(Post Redirect Get)パターンの場合、Postでエラーが発生した際に、エラー情報をModelStateに設定し、Getでリダイレクトする必要があります。その際のModelStateやViewDataをGetに持ち回る方法です。

ModelStateやViewDataの持ち回り

ALL半角スペースがnullでモデルバインドされるのを自作モデルバインドで回避する(ASP.NET 6 CORE MVC)

.NET Framework時代はALL半角スペースはALL半角スペースとしてそのままモデルバインドされましたが、.NET 6ではnullでバインドされてしまいます。カスタムモデルバインダーを自作してALL半角スペースでバインドされるようにする方法です。

ALL半角スペースをそのままモデルバインドする

カスタムタグヘルパー/カスタムHtmlヘルパーまわり

@Html.Actionの代替としてViewComponentを使用する(ASP.NET 6 CORE MVC)

.NET Frameworkでは、コントローラで生成されたモデルの内容を部分Viewに使いたい場合に@Html.Actionを使っていましたが、なんと.NET 6では@Html.Actionが使えなくなってしまっている!
.NET6では代替としてViewComponentを使います。

@Html.Actionの代替としてのViewComponent

カスタムHtmlヘルパーとカスタムタグヘルパーはどちらを使うべきか

.NETから使えるようになったカスタムタグヘルパーですが、.NET FrameworkのカスタムHtmlヘルパーは、カスタムタグヘルパーに移行しなければならないのか?
そんなことはありません、それぞれ特徴があります。

カスタムHtmlヘルパーとカスタムタグヘルパー

自作のカスタムタグヘルパーの色々な出力方法(ASP.NET CORE 6 MVC)

カスタムタグヘルパー(自作のタグヘルパー)はカスタムHTMLヘルパーと違ってタグとして定義するため、cshtmlに記載したタグ構造を生かす形でタグを出力できます。
例えばカスタムタグに囲まれた子要素をそのまま使ったり、加工して出力したりすることもできます。

自作のカスタムタグヘルパーの色々な出力方法

カスタムHTMLヘルパーの移行

ASP.NET Framework4からASP.NET 6 CORE MVCに移行するにあたり、
カスタムHTMLヘルパー(自作)の書き方が一部変更になりました(ラムダ式を取得する際に使っていたstatic系のクラスが廃止になったため)。
ラムダ式の取得方法、ModelStateの考慮、Client Side Validation、複数タグの出力あたりのサンプルになります。

カスタムHTMLヘルパーの移行

リクエスト・HttpContextまわり

そもそもModelStateってなんなんだ

ModelStateとViewModelの関係や、ModelState.Clearをなんのために行うかの説明になります。

ModelStateってなんなんだ

コントローラ以外でHttpContextを使いたい

ASP.NET COREでは、static HttpContextからSessionやIdentity.Userが取得できなくなったため、HttpContextAccessorを使用してSessionやIdentity.Userを取得するようにします。

コントローラ以外でHttpContextを使いたい