2015-09-11 3 views
2

Я пытаюсь создать список мультиселектов и указать значения по умолчанию для раскрывающегося списка, но значения по умолчанию, которые я предоставляю, игнорируются.MVC MultiSelectList значение по умолчанию игнорируется

Мой контроллер выглядит следующим образом:

var ProvisionFromDb = (from Provision in db.Provisions 
         orderby Provision.Provision1 ascending 
         select new SelectListItem 
          { 
           //select all items 
           Selected = true, 
           Text = Provision.AltDescription, 
           Value = Provision.Provision1.ToString() 
          }).ToList(); 
ViewBag.ProvisionDropdown = new MultiSelectList(ProvisionFromDb, "Value", "Text"); 

На мой взгляд, у меня есть следующее заявление:

@Html.ListBox("ProvisionId", (MultiSelectList)ViewBag.ProvisionDropdown) 

Все работает, для значений по умолчанию не выбран, за исключением. Я предполагаю, что это связано с тем, что MultiSelectList не распознает выбранное свойство в объектах SelectList. Каков самый простой способ исправить это?

Дополнительная информация: В заявлении о состоянии бритвы «ProvisionId» представляет имя/идентификатор раскрывающегося списка выбора, который создается.

+0

Если 'ProvisionId' является свойством в вашей модели, то установка свойства' Selected' 'SelectListItem 'игнорируется (это значение' ProvisionId', которое определяет, что выбрано) –

ответ

2

Решение здесь состояло в том, чтобы поместить значения по умолчанию в перегруженный конструктор MultiSelectList, где 4-й параметр представляет собой массив, представляющий значения выбранных по умолчанию элементов.

В моем случае мне не нужно было определять модель. Следующие работали:

ViewBag.ProvisionDropdown = new MultiSelectList(ProvisionFromDb, "Value", "Text", new[] {"Selected Value1","Selected Value2"}); 

Запрос LINQ может также использоваться для создания этого массива, основанный на свойстве SelectListItem «Selected».

1

Параметры, отображаемые как выбранные, определяются значением того, к чему вы привязываетесь. Здесь, а именно «ProvisionId». Если это свойство на вашей модели, вы должны вместо этого использовать ListBoxFor, а затем установить его в список Provision1 значений, которые вы хотите выбрать. Если это не свойство на вашей модели, вы можете установить что-то вроде ViewBag.ProvisionId с этим списком.

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