2017-02-07 3 views
0

Я знаю, что этот вопрос задан несколько раз, но ни одно из этих решений не работает для меня. Вот мой код.Select2 Multiselect binding не работает

Модель:

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, я изменил значение от имени к ID, и теперь я могу отображать выбранное значение. Но изменение значения и отправка по-прежнему не связывают новое значение. Также удалили список Multiselect, как было предложено.

+0

не связаны, но 'LanguageTypes' уже' IEnumerable 'создавая таким образом еще один идентичный используя' новый MultiSelectList (..) 'не имеет смысла. И 'ListBoxFor()' уже добавляет атрибут 'multiple =" multiple "'. Вы не указали свой метод POST, но код, который вы указали, будет привязан к методу, который вы моделируете как параметр, а значение 'LanguagesSpoken' будет массивом выбранных значений опций. –

ответ

0

Свойство ValueSelectListItem, которое вы используете для создания выпадающего списка, имеет значение ID для LanguageType. Таким образом, ваше значение selectoption будет значением ID. Таким образом, чтобы выбранные, он должен тип языка идентификаторам, а не имена вам следует установить в LanguagesSpoken proeprty,

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. Поэтому вам не нужно создавать новый список. Ниже, также должны работать

@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», new {id = Model.OrganizationId}, FormMethod.Post, new {@class = "form-horizontal"})) – TheFallenOne

Смежные вопросы