这周我一直在努力解决这个问题,而巴萨姆的回答是让我走上正轨的关键。我有一个可以有数量字段的库存项目的动态列表。我需要知道他们选择了多少项目,除了项目列表可以从 1 到n变化。
最后我的解决方案相当简单。我创建了一个名为 ItemVM 的 ViewModel,它有两个属性。项目 ID 和数量。在发布操作中,我接受了这些列表。启用索引后,所有项目都会通过..即使数量为空。您必须在服务器端验证和处理它,但是通过迭代处理这个动态列表是微不足道的。
在我看来,我正在使用这样的东西:
@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 的项目集合和项目 ID。
这项技术在 MVC 5 中使用 Visual Studio 2015 中的 EF 6。也许这会帮助像我一样搜索此解决方案的人。