Я искал ту же подсказку и нашел этот пост. Я только что сделал это, используя именованные кнопки отправки для кнопок удаления и уникальные количественные имена текстовых полей.
Одна форма охватывает всю корзину. Основной кнопкой отправки будет кнопка обновления корзины. Каждая кнопка удаления элемента называется «удалить» со значением, установленным для уникального ключа этого элемента корзины.
<input class="btnRemove" name="remove" type="image" value="@item.ProductId" />
Каждое текстовое поле Количество имеет префикс "qnty-" с уникальным ключом для этого элемента корзины.
<input id="qnty-@item.ProductId" name="qnty-@item.ProductId" type="text" value="@item.Quantity" class="cartListQty" />
После того, как мое действие было отправлено в цикл через FormCollection. Если имя «удалить», я удаляю этот уникальный ключ из корзины. Если имя начинается с «qnty-», я получаю оставшуюся часть имени (уникальный ключ элемента корзины) и подгоняю количество элементов к значению текстового поля.
[HttpPost]
public ActionResult Index(FormCollection collection)
{
Cart myCart = cartRepo.LoadCart();
foreach (string item in collection.AllKeys)
{
if (item.StartsWith("qnty-"))
{
int productId = Convert.ToInt32(item.Substring(5));
// Adjust quantity
}
if (item == "remove") // Remove item from cart
}
cartRepo.Save();
return RedirectToAction("Index");
}