Привязка модели MVC по умолчанию - привязать выпадающий список из нескольких элементов к списку IList <T> - PullRequest
2 голосов
/ 13 сентября 2010

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

Есть идеи?

1 Ответ

1 голос
/ 14 сентября 2010

Одно предложение:

Измените имя вашего элемента списка на «Местоположения», а затем в свой метод Action включите параметр string[] locations

Если MVC может сопоставить именаправильно, вы должны получить массив выбранных элементов.Затем вы можете вручную заняться обновлением базы данных с помощью соответствующих вставок и удалений.

...