この質問は何回か尋ねられましたが、それらの解決策のどれも私にとってはうまくいかないようです。だからここに私のコードです。Select2マルチセレクションバインドが機能しない
モデル:
public List<string> LanguagesSpoken { get; set; }
public List<SelectListItem> LanguageTypes { get; set; }
コントローラ
[HttpPost]
public ActionResult Update(int? id, OrganizationSetUp orgsetup)
{
organizationSetUp.LanguagesSpoken = _session.Query<Language>().Where(x => x.ID == organizationId).Select(x => x.LanguageType.ID.ToString()).ToList();
orgSetup.LanguageTypes = _session.Query<LanguageType>().Select(m => new SelectListItem { Value = m.ID.ToString(), Text = m.Name }).ToList();
}
ビュー:
@using (Html.BeginForm("Update", "OrganizationSetup", new { id = Model.OrganizationId }, FormMethod.Post, new { @class = "form-horizontal" }))
{
@Html.ListBoxFor(model => model.LanguagesSpoken,Model.LanguageTypes, new{ @class = "form-control", multiple = "multiple" })
}
私は、コントローラから値を渡していますし、それがバインドされていない、またそれが更新されていますPOST時に。ドロップダウンがポピュレートされ、マルチセレクトは機能しますが、サブミット時にモデルにバインドされません。何か不足していますか?
EDIT:Shyjuが指摘しているように、値をNameからIDに変更しました。これで、選択した値を表示できるようになりました。しかし、値を変更し、依然として新しい値をバインドしません。また、提案されたようにMultiselectリストを削除しました。
関連していない動作しますが、必要がある'のIEnumerableを ''ので、新しいMultiSelectList(..)を使用して、別の同一のものを作成 '無意味です。そして、 'ListBoxFor()'は既に 'multiple =" multiple "'属性を追加しています。あなたはあなたのPOSTメソッドを表示していませんが、あなたが表示したコードは、あなたがパラメータとしてモデル化したメソッドに正しくバインドされ、 'LanguagesSpoken'の値は選択されたオプション値の配列になります –