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>
はい、デフォルトでは、複数選択リストは選択された値の配列を介して投稿します。
この記事 には、複数選択リストで厳密に型指定されたビューを使用する方法など、詳細情報があります。
リンクされた「記事」から:
List<int> ToppingIds
。はい、配列を返します。
モデルを表示:
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)
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))