Я боролся с этим на этой неделе, и ответ Бассама был ключом к тому, чтобы меня на правильном пути. У меня есть динамический список элементов инвентаря, который может иметь поле количества. Мне нужно было знать, сколько из этих элементов они выбрали, кроме списка элементов может варьироваться от 1 до n .
Мое решение было довольно простым в конце. Я создал ViewModel под названием ItemVM с двумя свойствами. ItemID и количество. В post post я принимаю список из них. При индексировании все элементы передаются ... даже с нулевым количеством. Вы должны проверить и обработать его на стороне сервера, но с итерацией тривиально обращаться с этим динамическим списком.
В моем представлении я использую что-то вроде этого:
@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" />
}
Это дает me Список с индексом 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. Может быть, это поможет кому-то найти такое решение, как я.