Как получить все значения из списка, которые не выбраны в ASP.NET MVC - PullRequest
1 голос
/ 21 апреля 2010

У меня есть форма, которая (помимо прочего) содержит 2 списка с несколькими вариантами выбора. По сути, вы можете добавлять элементы к одному справа из полного списка элементов слева, используя некоторые кнопки добавления / удаления.

Проблема в том, что я не вижу способа сбора содержимого списка при отправке обратно на контроллер.

Я последовал этому примеру: http://ittecture.wordpress.com/2009/04/30/tip-of-the-day-198-asp-net-mvc-listbox-controls/

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

Надеюсь, это имеет смысл, Ник

Ответы [ 3 ]

1 голос
/ 22 апреля 2010

Спасибо за помощь, ребята. Я забыл упомянуть, что я заполняю список выбранных элементов с помощью jQuery. Не уверен, было ли это важно или нет.

В конце концов, я исправил это, выбрав все элементы по нажатию jQuery перед публикацией. Похоже, самое простое решение.

0 голосов
/ 22 апреля 2010

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

Вы можете подумать о наличии сетки или даже просто div с несколькими строками. Будет написано больше Javascript / JQuery, но это обеспечит приятный пользовательский опыт, поскольку никакие обратные передачи не потребуются, пока вся работа не будет завершена.

Вам нужно будет использовать JavaScript / JQuery для добавления и удаления элементов из div на основе кнопок для добавления и удаления.

Кроме того, для каждого элемента, добавляемого справа, вам необходимо добавить скрытое поле ввода:

<input type="hidden" id="SelectedItems" value="..." />

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

Чтобы обработать элементы справа, которые были удалены пользователем, вам понадобятся скрытые поля, чтобы указать, какие из них были удалены:

<input type="hidden" id="RemovedItems" value="..." />

Затем в вашем контроллере вы можете добавить два параметра в Action (или добавить два поля в viewmodel), которые будут массивами строк. Это будет установлено для всех значений в скрытых полях, которые были добавлены, и всех тех, которые были удалены.

0 голосов
/ 21 апреля 2010

В дополнение к списку, есть несколько скрытых полей ввода для хранения «добавленных в данный момент» элементов. При выборе в списке будет отображаться «элементы для удаления».

ОК, уточнение. Вы оставили левый и правый списки. Левый содержит доступные элементы, а выбранные помещаются и добавляются. Правый содержит текущие добавленные элементы, а выбранные помещаются в POST и затем удаляются из добавленных элементов.

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

<input type="hidden" name="currently_added" value="itemid" />

скрытые поля.

Да, вы можете пойти jQuery, но это простой способ; Не каждый сайт должен быть спроектирован так, чтобы включать JavaScript. Вышеупомянутое решение работает без включенного JavaScript.

Ваше сообщение со страницы даст вам 3 массива:

  1. Левая сторона выбранных элементов для добавления
  2. Правая сторона выделенных элементов для удаления
  3. Скрытые поля - уже добавленные элементы

Вы берете (3), удаляете (2) из ​​него, добавляете (1) к нему и отображаете ту же страницу или делаете что хотите.

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