Отправка коллекции предметов в ASP.NET MVC - PullRequest
3 голосов
/ 07 августа 2010

В моем проекте MVC есть два класса Order и Product.

Поскольку Product можно заказать много раз, а Order может иметь много продуктов, у меня есть третье лицочто OrderedProduct.Он объединяет эти две сущности в отношении многие ко многим.

Теперь я пытаюсь разрешить пользователю сделать заказ, поместив товары из выпадающего списка в поле, а затем сохранитьмой заказ.Также клиент должен заполнить некоторые поля в объекте Order, такие как данные об адресе и т. Д. Все, что я хочу, - это разместить все на одной странице.Пользователь может добавить из выпадающего списка столько элементов, сколько ему нужно, затем он может добавить весь заказ.

Чтобы упростить визуализацию, посмотрите на эту картинку:

Макет http://img245.imageshack.us/img245/4618/myimage.png

Теперь проблема в том, как реализовать такое поведение в моем приложении MVC.Должен ли я создать ViewModel, который объединяет Order класс и список Product или использовать частичное представление для Product классов?

Также, какова моя основная проблема , как я могу (элегантным способом) получить полный список выбранных продуктов или хотя бы идентификаторы продуктов в контроллере после запроса POST?В этом случае, как я могу указать, что то, что я отправляю, является набором идентификаторов?Просто добавить один объект, но как насчет всей коллекции?

Это место, где я не до конца понимаю asp.net MVC, поэтому, пожалуйста, дайте мне несколько ярких идей;) Приветствую вас всех, спасибо всовет для всех ваших ответов!

1 Ответ

2 голосов
/ 07 августа 2010

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

Сделайте Order вашей ViewModel. Учитывая, что у него есть свойство List<OrderedProduct>, которое называется OrderedProducts:
Создайте небольшой элемент управления редактора с ViewModel OrderedProduct. Никакой формы, просто текстовое поле / выпадающий список / все, что связано со свойством названия продукта и текстовое поле, связанное с количеством товара. Важно : поместите этот элемент управления в views / shared / EditorTemplates и назовите его OrderedProduct.ascx.

Дайте вашему Order объекту свойство с именем NewOrderedProduct типа OrderedProduct. В форме для представления Order сделайте: <%=Html.EditorFor(m=>m.OrderedProducts)%>, это даст вам редактируемый список текущих элементов в заказе.
После этого выполните: <%= Html.EditorFor(m=> m.NewOrderedProduct) %> здесь вы можете добавлять новые элементы.
Пусть действие [POST] принимает тип Order.

Теперь, когда оно отправляет, если свойство NewOrderedProduct действительно, вы можете добавить его в список OrderedProducts и снова отобразить. Вы можете добавить столько, сколько хотите, таким образом, и все они будут автоматически связываться.

Имеется отдельная кнопка отправки в форме для отправки заказа. Проверьте наличие имени этой кнопки в [POST] и отправьте все сразу.

Это дает вам прямую рабочую версию HTML. Оттуда вы можете Ajaxify, если хотите.

Редактировать
Обновлено, чтобы отразить функцию объекта OrderedProduct и исправить тип сообщения, которое принимает сообщение

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...