Обработка переменного числа полей формы - PullRequest
5 голосов
/ 17 мая 2010

Я работаю над формой, которая отображает информацию о заказах. Каждый заказ имеет уникальный идентификатор, но они не обязательно являются последовательными в форме. Кроме того, количество полей может варьироваться (одно поле на строку в форме). Входные данные в форму не будут отображаться прямо в базу данных, но будут добавлены к текущему значению в базе данных, а затем сохранены. Пример формы приведен на рисунке ниже - выноска справа показывает идентификатор для каждой строки. Form example

Я знаю, как сгенерировать форму, подобную этой, но я не могу понять, как легко и надежно обработать каждую из этих строк. Я также знаю, как дать каждому из полей уникальный идентификатор, например name="order-23" или name="order[23]", но как мне перевести это имя, чтобы я мог обновить соответствующую запись в базе данных?


РЕДАКТИРОВАТЬ: Одним из решений, которое я могу придумать, было бы перебрать каждое поле формы в FormCollection, и если имя поля соответствует шаблону, то я извлечет число из этого имени поля и обработает его.
Тем не менее, я чувствую, что должен быть намного более простой способ сделать это - этот метод, вероятно, будет включать в себя значительную часть обработки строки в каждом поле, и, возможно, будет сбой, если позже мне придется добавить дополнительные поля для каждой строки. .

Ответы [ 3 ]

1 голос
/ 18 мая 2010

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

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

0 голосов
/ 17 мая 2010

Я сделал эту загрузку в моей CMS.

По сути, я вроде как изменял.

Идея примерно такая ...

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

Когда вы нажимаете кнопку отправки, на этот URL будет отправлена ​​форма, поэтому в случае отправки заказа вы отправите страницу обратно в OrderPage.aspx? OrderId = xxxx

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

"Обновить заказы, где order id =" + request.querystring ["OrderId"]

Так как же обновить действие ...

На странице вызова, скажем, у вас есть ссылка «Новый заказ», при нажатии на которую вам нужно сделать 2 вещи ...

  1. перенаправить на эту страницу.
  2. создать идентификатор заказа для этого нового заказа.

хорошо, первое - просто, просто свяжите его с этой страницей.

второй ...

если эта страница не является обратной передачей if (! IsPostback) {/ * получить новый идентификатор * /} в зависимости от идентификаторов вашего заказа, это может включать создание нового guid или что-то вроде получения следующего номера в списке, выполнив выбрать максимальный (id) из базы данных.

получив новый идентификатор, вы все равно должны быть в событии page_load.

this.form.Action = this.form.Action + "? OrderId =" + yourNewOrderId;

... тада ...

Отправить страницу обратно клиенту.

просмотреть исходный код.

0 голосов
/ 17 мая 2010

Если у вас есть имена, просто прочитайте значения с помощью Request.Form ["order-23"] или заново создайте элементы управления на странице pre-init, и вы получите доступ к значениям в вашем событии сохранения непосредственно через созданные элементы управления.

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