Как вы управляете добавлением нескольких экземпляров объекта в временный объект в MVC? - PullRequest
0 голосов
/ 05 июня 2009

У меня есть объект, который имеет несколько различных свойств List, которые содержат дочерние объекты.

Я пытаюсь обернуть голову, чтобы пользователь мог выбрать и добавить эти дочерние объекты из представления New (где я создаю новый экземпляр родительского объекта).

В качестве примера предположим, что у меня есть класс Project и «New» ViewPage, который предоставляет пользователю форму для создания нового проекта. В этой форме пользователь может предоставить данные для основных свойств (без проблем), а затем есть область, которая позволяет пользователю добавлять объекты ProjectExpense в этот новый проект. Для каждого расхода проекта пользователь выбирает категорию расхода, значение отдельной позиции, возможно, количество. Когда пользователь хочет добавить более одного расхода, мы позволяем ему сделать это, предоставив небольшой симпатичный клон строки jQuery, который дает ему новую строку для работы.

Где я спотыкаюсь, так это как вернуть эти данные в действие Создать при отправке формы. Прямо сейчас я пытаюсь разобрать неизвестное количество этих строк ProjectExpense, что очень больно. Кажется, лучшим вариантом может быть сохранение объекта ProjectExpense в каком-либо пакете Session или TempData на сервере каждый раз, когда они добавляют строку. Затем в действии мы берем этот пакет, прикрепляем его к родительскому объекту и сохраняем как обычно.

Есть мысли о том, как другие делают эту работу?

Ответы [ 3 ]

0 голосов
/ 05 июня 2009

Это не в моей голове, и я не думаю о AJAX здесь, как о простом круговом обходе сервера, но: почему бы не иметь две формы на странице?

Первая форма будет отправлена ​​в действие «Новый» Проект, а вторая форма будет опубликована в действие «Создать расходы проекта»?

Вы могли бы потенциально поместить их в частичные представления для ясности и чистоты ваших моделей.

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

Если вы делаете это с AJAX, тогда проблема проще, вы можете сохранить JSON-представление всего объекта и затем отправить его обратно на сервер для десериализации и обработки.

Надеюсь, это поможет.

0 голосов
/ 05 июня 2009

Вы можете легко связать эти новые строки значений с IList. У Haacked есть сообщение о такой возможности , но оно немного устарело. Но в комментариях много полезной и актуальной информации. На мой взгляд, этот пост гораздо лучше описывает эту возможность по сравнению с постом jeloff (ссылка, которую вы указали в комментарии). Поэтому вам нужно просто изменить код JS, который добавляет строку ProjectExpense, чтобы установить соответствующие имена и использовать привязку IList в вашем методе контроллера. И вам не понадобится какой-то пользовательский JS, чтобы собрать все значения и добавить их в какое-то скрытое поле и так далее. Эта функция уже работает из коробки. ОБНОВЛЕНИЕ: Только что нашел еще одну хорошую ссылку об этом http://blog.codeville.net/2008/12/22/editing-a-variable-length-list-of-items-in-aspnet-mvc/

0 голосов
/ 05 июня 2009

Одно возможное решение, которое я нашел (для справки другого), в основном дублирует поля формы таким же образом, как и я, но при отправке формы (нажатие кнопки "Отправить") он вызывает метод, который обновляет скрытое поле формы соответствующими данными динамические данные.

http://weblogs.asp.net/jacqueseloff/archive/2009/04/17/creating-dynamic-forms-with-mvc-and-jquery.aspx

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