記事詳細


投稿日
2026年01月15日18時18分
タイトル

ViewData["UserId"] = new SelectList(_context.Users, "Id", "Id", monthlyBuget.UserId);

内容

コードを分解して説明します。

Csharp
ViewData["UserId"] = new SelectList(_context.Users, "Id", "Id", monthlyBuget.UserId);

1. ViewData とは

  • ViewData は Controller → View にデータを渡すための キーと値の辞書ViewDataDictionary)です。
  • ViewData["UserId"] は、ビュー側で "UserId" というキーでアクセスできるデータを格納しています。
  • 主に DropDownList や フォームの初期値 などに使われます。

2. SelectList とは

  • SelectList は、HTML の <select> 要素(ドロップダウン)に表示するためのデータ構造です。
  • コンストラクタの構文は以下の通りです:
Csharp
new SelectList( items, // データソース(IEnumerable) dataValueField, // option の value 属性に使うプロパティ名 dataTextField, // option の表示テキストに使うプロパティ名 selectedValue // 初期選択される値 )

3. コードの意味

Csharp
_context.Users
  • データベースから Users テーブルの全レコードを取得(_context は Entity Framework の DbContext)。
Csharp
"Id", "Id"
  • value 属性 と 表示テキスト の両方に Id プロパティを使用。
  • つまり、ドロップダウンの表示も value もユーザーの ID になります。
    • 例: <option value="1">1</option>
Csharp
monthlyBuget.UserId
  • ドロップダウンの初期選択値。
  • monthlyBuget オブジェクトの UserId プロパティと一致する項目が選択状態になります。

4. ビュー側での使い方例

Csharp
@Html.DropDownList("UserId", (SelectList)ViewData["UserId"], "選択してください")
  • "UserId" という名前の <select> を生成。
  • ViewData["UserId"] に渡した SelectList が選択肢として使われます。
  • "選択してください" は初期の空選択肢。

5. 改善ポイント

  • 現在は Id を表示していますが、ユーザー名を表示したい場合は次のようにします:
Csharp
ViewData["UserId"] = new SelectList(_context.Users, "Id", "UserName", monthlyBuget.UserId);
  • これで <option value="1">山田太郎</option> のように表示されます。

✅ まとめ
このコードは、データベースの Users テーブルからユーザー ID のリストを取得し、
monthlyBuget.UserId を初期選択状態にしたドロップダウンリスト用データを ViewData に格納しています。

もし希望があれば、この ViewData を使わずに ViewModel で型安全に書く方法も示せますが、そちらも解説しますか?
その方が ASP.NET MVC では推奨されます。

Powered by Froala Editor

添付画像

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