Ваша модель неверна.У вас должно быть свойство коллекции для привязки выбранных значений.Вы не должны использовать одно и то же свойство для обоих аргументов вашего SelectList.Поэтому начните с добавления свойства в модель представления, в котором будут храниться выбранные идентификаторы:
public class Customer
{
public int Id { get; set; }
public List<int> SelectedContactTypeIds { get; set; }
public List<ContactType> ContactTypes { get; set; }
}
, а затем исправьте свое представление:
@Html.ListBoxFor(
m => m.SelectedContactTypeIds,
new MultiSelectList(Model.ContactTypes, "Id", "Name")
)
Теперь внутри действия Create
вы получитесвойство SelectedContactTypeIds
, содержащее выбранные идентификаторы:
public ActionResult Create(Customer customer)
{
// here the customer.SelectedContactTypeIds will contain the ids of the selected items
...
}
Причина, по которой ваш код не работает, заключается в том, что вы связали SelectList со свойством ContactTypes
, которое является сложным типом и, как вы знаетеэлемент <select>
отправляет только выбранные значения при отправке формы.Вот как работает HTML.