web-dev-qa-db-ja.com

ASP.NET MVCのモデルバインディングで複数選択リストはどのように機能しますか?

ASP.NET MVCで選択リストを複数に設定している場合、モデルバインディングはどのように機能しますか?

選択したアイテム、配列に対して何を返しますか?

<SELECT NAME="toppings" MULTIPLE SIZE=5>
    <option value="mushrooms">mushrooms</option>
    <option value="greenpeppers">green peppers</option>
    <option value="onions">onions</option>
    <option value="tomatoes">tomatoes</option>
    <option value="olives">olives</option>
</SELECT>
50
Simpatico

はい、デフォルトでは、複数選択リストは選択された値の配列を介して投稿します。

この記事 には、複数選択リストで厳密に型指定されたビューを使用する方法など、詳細情報があります。

リンクされた「記事」から:

  • モデルまたはビューモデルクラスには、選択したオプション項目のIDのコレクションプロパティが必要です。 List<int> ToppingIds
  • 複数選択リストPOSTを含むフォームのコントローラーアクションメソッドでは、モデルまたはビューモデルクラスに追加したコレクションプロパティを介して、選択したオプション項目にアクセスできます。
26
Sam Wessel

はい、配列を返します。

モデルを表示:

public class MyViewModel
{
    public int[] SelectedIds { get; set; }
    public IEnumerable<SelectListItem> Items { get; set; }
}

コントローラ:

public ActionResult Index()
{
    var model = new MyViewModel
    {
        // fetch the items from some data source
        Items = Enumerable.Select(x => new SelectListItem
        {
            Value = x.Id,
            Text = "item " + x.Id
        })
    };
    return View(model);
}

表示:

@model MyViewModel
@Html.ListBoxFor(x => x.SelectedIds, Model.Items)
24
Hbas

VegTableViewmodelで:

public IEnumerable<MultiSelectList> Vegetables { get; set; }

Controller:野菜リストを取得し、それをVegTableViewModelのVegetablesプロパティに渡します。

viewmodel.Vegetables = vegetables .Select(d => new MultiSelectList(d.VegName));

ビューで:

@Html.ListBoxFor(m => m.L, new MultiSelectList(Model.Vegetables.Select(d => d.Items))
7