ASP.NET MVCでフォームからリストを取得する方法


  1. フォームの各入力フィールドに名前を付けて、その名前を使用してリストを取得する方法:

HTMLのフォームに、各入力フィールドに一意の名前を付けます。例えば、次のようなフォームがあるとします:

<form action="/YourController/YourAction" method="post">
  <input type="text" name="items[0]" />
  <input type="text" name="items[1]" />
  <input type="text" name="items[2]" />
  <!-- 追加の入力フィールド -->
  <input type="submit" value="Submit" />
</form>

この場合、入力フィールドのname属性にitems[0]items[1]items[2]という名前を付けています。これにより、サーバーサイドのコードでリストを取得できます。以下は、コントローラー内のアクションメソッドでリストを取得する例です:

[HttpPost]
public ActionResult YourAction(List<string> items)
{
  // 取得したリストを処理するコードを記述
  // ...
  return View();
}

上記の例では、コントローラーのアクションメソッドのパラメータとしてList<string> itemsを受け取っています。ASP.NET MVCは、フォームの入力フィールドの名前とパラメータの名前をマッピングし、自動的にリストにバインドしてくれます。

  1. モデルを使用してリストを取得する方法:

もう一つの方法は、モデルを使用してリストを取得する方法です。まず、リストの要素を表すモデルクラスを作成します。例えば、次のようなモデルクラスがあるとします:

public class ItemModel
{
  public string Name { get; set; }
}

次に、フォームの各入力フィールドに対応するプロパティを持つリストをモデルクラスに追加します:

public class YourViewModel
{
  public List<ItemModel> Items { get; set; }
}

これで、フォームからリストを取得する準備が整いました。次に、ビューでフォームを作成し、モデルを使用してリストをバインドします:

@model YourViewModel
@using (Html.BeginForm("YourAction", "YourController", FormMethod.Post))
{
  for (int i = 0; i < Model.Items.Count; i++)
  {
    @Html.TextBoxFor(m => m.Items[i].Name)
  }
  <input type="submit" value="Submit" />
}

上記の例では、YourViewModelをビューのモデルとして使用し、TextBoxForヘルパーを使用してフォームの各入力フィールドを作成しています。

最後に、コントローラーのアクションメソッドでリストを受け取ります:

[HttpPost]
public ActionResult YourAction(YourViewModel model)
{
  List<ItemModel> items = model.Items;
  // 取得したリストを処理するコードを記述
  // ...
  return View();
}

上記の例では、コントローラーのアクションメソッドのパラメータとしてYourViewModel modelを受け取り、その中のItemsプロパティからリストを取得しています。

以上が、ASP.NET MVCでフォームからリストを取得する方法のいくつかです。これらの方法を使用することで、フォームから送信されたデータをリストとして取得し、サーバーサイドで処理することができます。