У вас проблема с использованием Model.Items в качестве параметра. Код
<%= Html.DropDownList("items", new MultiSelectList(Model.AvailableItems,
"id", "name", Model.items), new { multiple = "multiple" })%>
на самом деле не работает так, как вы ожидаете. Это работает, потому что название выпадающего списка - "items". Это потому, что к вашему действию был добавлен параметр формы под названием «элементы». Этот параметр сохраняется в ViewState действия (не путайте с ViewData).
Html.DropdownList () видит, что существует параметр ViewState с именем, совпадающим с именем раскрывающегося списка, и использует этот параметр ViewState для обработки выбранных значений. Он полностью игнорирует переданные вами Model.items.
Если кто-то может объяснить логику неспособности переопределить поведение по умолчанию, то я хотел бы услышать это.
Итак, это ваша первая проблема. Чтобы обойти это, все, что вам нужно сделать, это переименовать выпадающий список во что-то другое - точно так же, как вы это делали во втором примере. Теперь ваша вторая проблема вступает в игру: список выбранных элементов должен быть набором простых объектов (я думаю, что это действительно должен быть IEnumerable, но я не уверен на 100%).
Метод DropDownList () попытается сопоставить эти выбранные значения со значением в вашей коллекции AvailableItems
. Если он не может этого сделать, он попытается сопоставить его с текстом.
Итак, попробуйте это, чтобы увидеть, работает ли оно
<%= Html.DropDownList("somethingelse", new MultiSelectList(Model.AvailableItems,
"id", "name", Model.items.Select(c=> c.name)), new { multiple = "multiple" })%>
Удачи