記事詳細


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

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

内容

ASP.NET Core MVC の Razor ビューで
@Html.DisplayFor(modelItem => item.IncomeCategoryNavigation.CategoryName) が null の場合に、その列(<th>...</th>)自体を表示しないようにするには、条件分岐で囲むのが一番シンプルです。

サンプルコード

Cshtml
@foreach (var item in Model) { <tr> @* IncomeCategoryNavigation.CategoryName が null でない場合のみ表示 *@ @if (!string.IsNullOrEmpty(item?.IncomeCategoryNavigation?.CategoryName)) { <th> @Html.DisplayFor(modelItem => item.IncomeCategoryNavigation.CategoryName) </th> } @* 他の列 *@ <th>@Html.DisplayFor(modelItem => item.OtherProperty)</th> <th>@Html.DisplayFor(modelItem => item.AnotherProperty)</th> </tr> }

ポイント

  1. item?....?....

    • Null 条件演算子 (?.) を使うことで、途中のオブジェクトが null でも例外を防ぎます。
  2. string.IsNullOrEmpty(...)

    • 値が null または空文字の場合に列を非表示にできます。
    • 空文字も表示したくない場合に有効です。
  3. 列ごと非表示

    • <th> タグごと if ブロックに入れることで、HTML 出力自体を抑制します。

もし ヘッダー行 (<thead>) も同様に非表示にしたい場合は、先に Model を走査して「その列に表示すべき値があるか」を判定し、フラグで制御する方法が使えます。

Cshtml
@{ bool showIncomeCategory = Model.Any(m => !string.IsNullOrEmpty(m?.IncomeCategoryNavigation?.CategoryName)); } <thead> <tr> @if (showIncomeCategory) { <th>カテゴリ名</th> } <th>その他</th> </tr> </thead> <tbody> @foreach (var item in Model) { <tr> @if (showIncomeCategory) { <td>@Html.DisplayFor(modelItem => item.IncomeCategoryNavigation.CategoryName)</td> } <td>@Html.DisplayFor(modelItem => item.OtherProperty)</td> </tr> } </tbody>

✅ この方法なら、データが null の場合は列そのものを出力しないことができます。
もしご希望が「行単位で非表示」か「列単位で非表示」かによって、条件の置き方を変えれば対応可能です。

必要であれば、このロジックを 部分ビュー(Partial View) に切り出して再利用できる形にもできますが、そのコードも提示できます。
このまま列単位非表示のままで進めますか?

Powered by Froala Editor

添付画像

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