今週は苦労していましたが、Bassamの答えが私を正しい軌道に乗せるための鍵でした。数量フィールドを持つことができる在庫アイテムの動的リストがあります。アイテムのリストが1からnまで変化する可能性があることを除いて、彼らが選択したアイテムの数を知る必要がありました。
私の解決策は結局かなり単純でした。2つのプロパティを持つItemVMというViewModelを作成しました。ItemIDと数量。ポストアクションでは、これらのリストを受け入れます。インデックスをオンにすると、数量がnullの場合でも、すべてのアイテムが渡されます。サーバー側で検証して処理する必要がありますが、反復を行うと、この動的リストを処理するのは簡単です。
私の見解では、私は次のようなものを使用しています:
@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が作成されます。
この手法は、Visual Studio2015のEF6を利用するMVC5で機能しています。これは、私のようにこのソリューションを検索する人に役立つかもしれません。