記事詳細


投稿日
2026年08月21日19時50分
タイトル

ASP.NET Core MVC: <table class="table>内の@Html.DisplayFor(modelItem => item.IncomeCategoryNavigation.CategoryName)の値がNullである時、<th> @Html.DisplayNameFor(model => model.IncomeCategoryNavigation)</th>の表示をしないようにするコードを教えてください。

内容

ASP.NET Core MVC の @Html.DisplayNameFor(...) は、モデルのメタデータから列名(表示名)を取得するだけなので、
item.IncomeCategoryNavigation.CategoryName が null かどうかは直接関係ありません。
そのため、「値が null のときは <th> を出さない」には、Razor 側で条件分岐を入れる必要があります。

実装例

もし Model が IEnumerable<YourModel> のようなコレクションで、
テーブルのヘッダー行を作る場合は、次のように書けます。

Csharp
@model IEnumerable<YourApp.Models.YourModel> <table class="table"> <thead> <tr> @* IncomeCategoryNavigation.CategoryName が null でないデータが1件でもあればヘッダー表示 *@ @if (Model.Any(m => m.IncomeCategoryNavigation?.CategoryName != null)) { <th> @Html.DisplayNameFor(model => model.First().IncomeCategoryNavigation.CategoryName) </th> } <th>その他の列</th> </tr> </thead> <tbody> @foreach (var item in Model) { <tr> @if (item.IncomeCategoryNavigation?.CategoryName != null) { <td>@Html.DisplayFor(modelItem => item.IncomeCategoryNavigation.CategoryName)</td> } <td>その他のセル</td> </tr> } </tbody> </table>

ポイント

  1. **?.(null 条件演算子)**で IncomeCategoryNavigation が null の場合も安全にアクセス。
  2. Model.Any(...) で、1件でも値がある場合のみ <th> を出力。
  3. model.First() を使って DisplayNameFor に型情報を渡す(DisplayNameFor はコレクション全体ではなく要素型のプロパティ名を使うため)。

✅ この方法なら、

  • 全データで CategoryName が null → <th> 非表示
  • 1件でも値あり → <th> 表示
    が実現できます。

もし「行ごとに <th> を消す」のではなく「列ごとに完全に非表示」にしたい場合は、この方法が最適です。

必要であれば、このコードを 部分ビュー化して再利用可能なヘッダー生成ロジック にすることもできますが、
そのサンプルも作りますか?
そうすれば複数のテーブルで同じ条件付きヘッダーを使えます。

Powered by Froala Editor

添付画像

画像はありません
Genreのカテゴリ-名
Views
編集 | 記事一覧