Я использую MVC 2.0 в приложении ASP.NET, использующем NHibernate.
У меня есть рабочий слой View, Controller и доступа к данным, использующий NHibernate, который может отображать и сохранять объект с отношением к другому сопоставленному объекту:
Человек -> Местоположение
Он использует HTML-помощник HTML.DropDownListFor () для отображения списка всех местоположений. Пользователь может выбрать одну из локаций из списка и нажать «Сохранить».
Связыватель модели по умолчанию правильно устанавливает значение местоположения в сохраняемой сущности «Человек». Это местоположение является сопоставленной сущностью nhibernate, оно создается и имеет значение id, выбранное в раскрывающемся списке. Очевидно, что в раскрывающемся списке, в котором содержатся местоположения, есть только идентификаторы местоположений, остальные значения для этого местоположения равны нулю. Хорошо. Я только пытаюсь сохранить человека со ссылкой на существующее местоположение.
Итак, вот и осложнение. Нам необходимо изменить отношения между двумя организациями. Теперь Человек может иметь ссылку на многие места.
Person.Locations будет IList
У меня вопрос: как вы получаете связыватель модели по умолчанию для выбора из выпадающего списка multiselect и заполнения IList.
Мне удалось сохранить коллекции сущностей в прошлом с использованием синтаксиса [index] .PropertyName, как объяснил Фил Хаакед .... http://haacked.com/archive/2008/10/23/model-binding-to-a-list.aspx.
Проблема здесь в том, что у меня есть только выпадающий список, и он будет публиковать в связывателе модели повторяющийся ключ с другими значениями:
Person.Location.Id: 2
Person.Location.Id: 4
Person.Location.Id: 5
Это, к сожалению, не работает. список местоположений продолжает возвращаться Null.
Наш парень по пользовательскому интерфейсу использует плагин JQuery для отображения элементов в списке выбора, поэтому я бы предпочел не использовать другой пользовательский интерфейс.
Есть идеи?