Каков наилучший способ обработки повторяющихся форм в MVC? - PullRequest
5 голосов
/ 06 февраля 2009

Лучший публичный пример, который я могу придумать, - это корзина с амазонками. Где у вас есть страница, которая отображает несколько отдельных записей, которые могут иметь несколько обновленных отдельных полей.

Я не могу поместить каждый из них в тег формы, поскольку пользователь может изменить несколько записей и затем отправить их.

Я не могу просто обновить все записи, которые я получаю, потому что:
1. Производительность
2. Аудит
3. Если кто-то изменил запись, которую пользователь «не изменил», когда он просматривал страницу, а затем подтвердил, что эти изменения будут перезаписаны.

Так, как лучше всего справиться с возвратом данных, а затем с тем, какие записи были изменены?

Это ясно?

Ответы [ 3 ]

3 голосов
/ 06 февраля 2009

Используйте привязку! Не повторяйте коллекцию форм в своих действиях.

Стив Сандерсон написал в блоге 1004 * о том, как это сделать. Я написал сообщение в блоге о том, как это сделать с MvcContrib . FluentHtml Оба сообщения очень подробны и содержат загружаемый код.

1 голос
/ 06 февраля 2009

Один (но не обязательно лучший) подход заключается в том, чтобы хранить, какие элементы изменены в js-переменной или что-то на стороне клиента при их изменении , и затем отправлять только те данные, которые действительно отличается от того, что получил пользователь.

и, как сказал Эрик, вы можете использовать скрытые элементы формы, чтобы убедиться, что она работает и без js.

1 голос
/ 06 февраля 2009

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

Вы можете использовать некоторую логику javascript для обнаружения изменения значения формы и обновления скрытого поля в разделе формы, если это происходит; или вы можете скрыть исходные значения внутри скрытого поля в каждом разделе формы (хотя я не рекомендую этого, так как слишком много полей / форм будет раздувать вашу страницу).

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