2010-05-17 2 views
5

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

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


EDIT: Одно решение, я могу думать о том, чтобы перебирать каждое поле формы в FormCollection, и если имя поля соответствует шаблону, то я извлечет число от этого имя поля и обработать его.
Однако, я считаю, что должен быть более простой способ это сделать - это метод, скорее всего, привести изрядное немного обработки строк на каждом поле, и не было бы, возможно, упадет, если я должен добавить дополнительные поля для каждой строки позже.

+1

+1 для макета, это круто :) –

+2

@codeka - Я использовал макеты Balsamiq - его БОЛЬШАЯ программа –

ответ

1

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

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

+0

Я считаю, что после обратной передачи я могу получить список идентификаторов (путем извлечения их из базы данных). Если этот метод работает, мне просто нужно посмотреть, как извлечь требуемое поле из 'FormCollection' и обновить его - не должно быть слишком сложно. –

+0

Я в конечном итоге сделал немного обоим - я извлекаю каждый заказ из базы данных, а затем используя свой идентификатор заказа, обращаюсь к его значению в FormCollection - я основывал свое решение частично на методе, представленном в http://stackoverflow.com/ вопросы/762825/как-может-а-FormCollection-быть перечислены в-Asp-сетчатой ​​MVC/763952 # 763952 –

0

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

0

Я выполнил эту нагрузку в своей CMS.

По существу я вроде обманутыми.

Идея что-то вроде этого ....

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

При нажатии на кнопку отправки формы будет отправлено на этот адрес так и в случае подачи заявки вы бы опубликовать страницу обратно OrderPage.aspx? OrderId = хххх

затем на сервере вы бы построить оператор обновления для вашей БД, который содержал что-то вроде ...

«обновление заказов, где идентификатор заказа =» + Request.QueryString [ «OrderId»]

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

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

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

ОК первое, простое, просто свяжите его с этой страницей.

второй ...

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

Как только у вас есть этот новый идентификатор, вы все равно должны находиться в событии page_load.

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

... тада ...

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

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

+0

oh я забыл добавить, когда эта страница отправлена ​​пользователем, нажав кнопку отправки, она будет отсылать обратно на сервер, а Request.QueryString [«OrderId»] будет содержать ваш вновь созданный идентификатор заказа и заполненные поля формы, которые, конечно, вы обрабатываете обычным способом. – War

+0

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

Смежные вопросы