Создать модель для редактирования:
public class ProductEdit
{
public int ProductId { get; set; }
public string Name { get; set; }
public int Quantity { get; set; }
}
Проецирование на модель для отображения:
[AcceptVerbs(HttpVerbs.Get)]
public Checkout(int cartId)
{
var model = (from c in Repository.Where(c.Id == cartId)
from p in c.Products
select new ProductEdit
{
ProductId = p.ProductId,
Name = p.Name,
Quantity = p.Quantity
}).First();
return View(model);
}
Форма должна использовать определенный формат имени для привязки к списку:
<% int i = 0; foreach(var product in Model.Products) { %>
<p>
<%= Html.Hidden(string.Format("products[{0}].ProductId", i), product.ProductId) %>
<%= Html.Encode(product.Name) %>
<%= Html.TextBox(string.Format("products[{0}].Quantity", i), product.Quantity) %>
</p>
<% i++; } >
Привязка к модели на посту:
[AcceptVerbs(HttpVerbs.Post)]
public ActionResult CheckOut(int cartId, IEnumerable<ProductEdit> products)
{
// update products repository
}