我想大家应不用我解释代码的意思了,很简单。 后台代码如下: 复制代码 代码如下: public partial class ShopCartTest : System.Web.UI.UserControl { List<Product> productsList = null; protected override void OnPreRender(EventArgs e) { base.OnPreRender(e); switch (Acion) { case "removeProductOnShoppingCart": productsList = Product.GetProductsInCart(ProductID); break; case "changeProductCount": productsList = Product.GetProductsInCart(null); foreach (var item in productsList) { if (item.ID == ProductID) { item.Count = "3"; } } break; case "AddProduct": productsList = Product.GetProductsInCart(null); productsList.Add(new Product() { ID = "173233", Name = "ElandMX9470", Price = "399.00", BackMoney = "0.00", Score = "0", Count = "1" }); break; default: productsList = Product.GetProductsInCart(ProductID); break; } ListView1.DataSource = productsList; ListView1.DataBind(); } public string GetProductsWeight() { return Product.GetProductsInCart(ProductID).Sum(p => decimal.Parse(p.Price) * decimal.Parse(p.Count)).ToString(); } public string GetProductsOriginalPrice() { return Product.GetProductsInCart(ProductID).Sum(p => decimal.Parse(p.Price) * decimal.Parse(p.Count)).ToString(); } public string ProductID { get; set; } public string Acion { get; set; } }
把对购物车的逻辑都写到这里面,通过action来判断是什么操作,一样简单的代码。再来看看Product类: 复制代码 代码如下: public class Product { public string ID { get; set; } public string Name { get; set; } public string Price { get; set; } public string BackMoney { get; set; } public string Score { get; set; } public string Count { get; set; }
public static List<Product> GetProductsInCart(string productID) { List<Product> list = new List<Product>() { new Product{ID="173259",Name="毛毛仔妮妮熊MX9470",Price="99.00",BackMoney="0.00",Score="0",Count="1"}, new Product{ID="155097",Name="xxxxxx新款轻巧便携式电脑桌(送鼠标垫)",Price="79.00",BackMoney="¥0.00",Score="0",Count="1"}, new Product{ID="155098",Name="xxxxxx护眼台灯(理想)STL-T412W-03WT",Price="69.00",BackMoney="¥0.00",Score="0",Count="1"} }; return list.Where(p => { return p.ID != productID; }).ToList(); } }
通过ajax使用购物车还需要两个类: 复制代码 代码如下: public class GetProducts : IHttpHandler { public void ProcessRequest(HttpContext context) { context.Response.ContentType = "text/plain"; ViewManager<ShopCartTest> viewManager = new ViewManager<ShopCartTest>(); ShopCartTest control = viewManager.LoadViewControl("~/ShopCartTest.ascx"); control.ProductID = context.Request.QueryString["productId"]; control.Acion = context.Request.QueryString["action"]; context.Response.Write(viewManager.RenderView(control)); } public bool IsReusable { get { return false; } } }
复制代码 代码如下: public class ViewManager<T> where T : UserControl { private Page m_pageHolder; public T LoadViewControl(string path) { m_pageHolder = new Page(); return this.m_pageHolder.LoadControl(path) as T; } public string RenderView(T control) { StringWriter output = new StringWriter(); this.m_pageHolder.Controls.Add(control); HttpContext.Current.Server.Execute(this.m_pageHolder, output, false); return output.ToString(); } }