(申し訳ありませんが、ここにいくつかの項目がありますが、どれも私がこれを機能させることを可能にしていないようです。)
複数選択を可能にするDropDownListを作成します。リストを作成できますが、現在選択されている値が機能しているように見えません。
私のコントローラーには以下があります:
ViewBag.PropertyGroups = from g in db.eFinGroups
where g.GroupType.Contents == "P"
select new
{
Key = g.Key,
Value = g.Description,
Selected = true
};
ViewBag.SelectedPropertyGroups = from g in company.Entities
.First().Properties.First().PropertyGroups
select new {
g.eFinGroup.Key,
Value = g.eFinGroup.Description };
私の見解では:
@Html.DropDownListFor(model => model.PropertyGroupsX,
new MultiSelectList(ViewBag.PropertyGroups
, "Key", "Value"
, ViewBag.SelectedPropertyGroups),
new { @class = "chzn-select", data_placeholder = "Choose a Property Group", multiple = "multiple", style = "width:350px;" })
PropertyGroupXはモデルのstring []です。
選択したプロパティを使用してすべてのタイプの反復を試みました...値のみ、キーのみなどの両方を渡します。
また、PropertyGroupXはどのタイプであると想定されていますか?文字列配列は正しいですか?それとも、現在のプロパティグループを含む辞書にする必要がありますか?これに関するドキュメントを見つけるのに本当に苦労しています。
誰かがListBoxForを使うべきだと提案しました。私はそれに変更しましたが、それでも同じ問題があります。選択した値は、オプションタグがレンダリングされるときに選択済みとして設定されていません。これが私が試したものです:
@ Html.ListBoxFor(model => model.PropertyGroups、new MultiSelectList(ViewBag.PropertyGroups、 "Key"、 "Value"))
私はmodel.PropertyGroupsを、値に一致する文字列のコレクションとして、このIDに一致するGuidのコレクションとして、およびViewBagの項目に一致するキーと値の両方を持つ匿名タイプとして試しました。何も動作しないようです。
複数選択リストを作成する場合は、DropDownListFor
を使用しません。 ListBoxFor
ヘルパーを使用します。
モデルを見る:
public class MyViewModel
{
public string[] SelectedIds { get; set; }
public IEnumerable<SelectListItem> Items { get; set; }
}
コントローラ:
public ActionResult Index()
{
var model = new MyViewModel
{
// preselect the first and the third item given their ids
SelectedIds = new[] { "1", "3" },
// fetch the items from some data source
Items = Enumerable.Range(1, 5).Select(x => new SelectListItem
{
Value = x.ToString(),
Text = "item " + x
})
};
return View(model);
}
見る:
@model MyViewModel
@Html.ListBoxFor(x => x.SelectedIds, Model.Items)