Вот мой класс ... какие-нибудь указатели?
public class Cart
{
private List<CartLine> lines = new List<CartLine>();
public IList<CartLine> Lines { get { return lines.AsReadOnly(); } }
public void AddItem(Product product, int quantity)
{
var line = lines.FirstOrDefault(l => l.Product.ProductID == product.ProductID);
if (line == null)
lines.Add(new CartLine { Product = product, Quantity = quantity });
else
line.Quantity += quantity;
}
public decimal ComputeTotalValue()
{
return lines.Sum(l => l.Product.Price * l.Quantity);
}
public void Clear()
{
lines.Clear();
}
public void RemoveLine(Product product)
{
lines.RemoveAll(l => l.Product.ProductID == product.ProductID);
}
}
public class CartLine
{
public Product Product { get; set;}
public int Quantity { get; set;}
}
Добавление метода Action в контроллер.
public RedirectToRouteResult AddToCart(Cart cart, int productID, string returnUrl)
{
Product product = productsRepository.Products.FirstOrDefault(p => p.ProductID == productID);
cart.AddItem(product, 1);
return RedirectToAction("Index", new { returnUrl });
}
public RedirectToRouteResult RemoveFromCart(Cart cart, int productID, string returnUrl)
{
Product product = productsRepository.Products.FirstOrDefault(p => p.ProductID == productID);
cart.RemoveLine(product);
return RedirectToAction("Index", new { returnUrl });
}
public ViewResult Index(Cart cart, string returnUrl)
{
ViewData["returnUrl"] = returnUrl;
ViewData["CurrentCategory"] = "Cart";
return View(cart);
}
Моя пользовательская модель переплета:
public class CartModelBinder : IModelBinder
{
private const string cartSessionKey = "_cart";
#region IModelBinder Members
public object BindModel(ControllerContext controllerContext, ModelBindingContext bindingContext)
{
if (bindingContext.Model != null)
throw new InvalidOperationException("Cannot update instances");
Cart cart = (Cart)controllerContext.HttpContext.Session[cartSessionKey];
if (cart == null)
{
cart = new Cart();
controllerContext.HttpContext.Session["cartSessionKey"] = cart;
}
return cart;
}
#endregion
}