2017-02-07 17 views
0

この質問は何回か尋ねられましたが、それらの解決策のどれも私にとってはうまくいかないようです。だからここに私のコードです。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リストを削除しました。

+0

関連していない動作しますが、必要がある'のIEnumerableを ''ので、新しいMultiSelectList(..)を使用して、別の同一のものを作成 '無意味です。そして、 'ListBoxFor()'は既に 'multiple =" multiple "'属性を追加しています。あなたはあなたのPOSTメソッドを表示していませんが、あなたが表示したコードは、あなたがパラメータとしてモデル化したメソッドに正しくバインドされ、 'LanguagesSpoken'の値は選択されたオプション値の配列になります –

答えて

0

のドロップダウンを構築するために使用しているプロパティは、LanguageTypeのID値を持っています。選択肢の値はIDの値になります。だから、それらの選択にするためには、言語タイプIDは、ありませんあなたはLanguagesSpoken proeprtyに設定shoud名、ビューでも

organizationSetUp.LanguagesSpoken = _session.Query<Language>() 
              .Where(x => x.ID == organizationId) 
              .Select(x => x.LanguageType.ID).ToList(); 
orgSetup.LanguageTypes = _session.Query<LanguageType>() 
           .Select(m => new SelectListItem { Value = m.ID.ToString(), 
                 Text = m.Name }).ToList(); 

べき、Model.LanguageTypesはすでにSelectListItemのリストです。だからあなたはそれから新しいリストを作成する必要はありません。以下もLanguageTypes`がすでにある `

@Html.ListBoxFor(model => model.LanguagesSpoken,Model.LanguageTypes, 
            new { @class = "form-control", multiple = "multiple" }) 
+0

ありがとう。これは、ドロップダウンに値を表示するのに役立ちました。しかし、いったん新しい値を選択して提出すると、それをorganizationSetUp.LanguagesSpokenフィールドにバインドしません。 – TheFallenOne

+0

私はちょうどあなたのコードをコピーして貼り付けました。ここをクリックhttp://imgur.com/a/UzGsB – Shyju

+0

私はフォームを持っている方法に何か問題がありますか? (Html.BeginForm( "Update"、 "OrganizationSetup"、新しい{id = Model.OrganizationId}、FormMethod.Post、new {@class = "form-horizo​​ntal"}))を使用して) – TheFallenOne

関連する問題