Я боролся с этим на этой неделе, и ответ Бассама был ключом, чтобы вывести меня на правильный путь. У меня есть динамический список предметов инвентаря, который может иметь поле количества. Мне нужно было знать, сколько предметов они выбрали, кроме списка предметов, который может варьироваться от 1 до n .
Мое решение было довольно простым в конце. Я создал ViewModel под названием ItemVM с двумя свойствами. ItemID и количество. В сообщении я принимаю список этих. При включенном индексировании все элементы проходят .. даже с нулевым количеством. Вы должны проверить и обработать его на стороне сервера, но с помощью итерации обрабатывать этот динамический список тривиально.
В моем представлении я использую что-то вроде этого:
@foreach (Item item in Items)
{
<input type="hidden" name="OrderItems.Index" value="@item.ItemID" />
<input type="hidden" name="OrderItems[@item.ItemID].ItemID" value="@item.ItemID" />
<input type="number" name="OrderItems[@item.ItemID].Quantity" />
}
Это дает мне список с индексом на основе 0, но итерация в контроллере извлекает все необходимые данные из новой строго типизированной модели.
public ActionResult Marketing(List<ItemVM> OrderItems)
...
foreach (ItemVM itemVM in OrderItems)
{
OrderItem item = new OrderItem();
item.ItemID = Convert.ToInt16(itemVM.ItemID);
item.Quantity = Convert.ToInt16(itemVM.Quantity);
if (item.Quantity > 0)
{
order.Items.Add(item);
}
}
После этого вы получите набор предметов, количество которых превышает 0, и идентификатор предмета.
Этот метод работает в MVC 5 с использованием EF 6 в Visual Studio 2015. Возможно, это поможет кому-то искать это решение, как я.