Shopping cart demo

Mã nguồn đính kèm là ví dụ về cách xây dựng Shopping cart trong ASP.NET MVC, bạn có thể tải mã nguồn đầy đủ ở link sau.

Ví dụ sử dụng csdl Northwind có thể download về từ site của Microsoft.

Code tham khảo ở HomeController.cs

public ActionResult Index()
{
Models.Northwind2Entities db = new Models.Northwind2Entities();
return View(db.Products.ToList());
}
public ActionResult AddToCart(int id, int quantity =1)
{
ShoppingCart cart = (ShoppingCart)Session[“cart”];
if (cart == null){
cart = new ShoppingCart();
}
cart.AddItem(id.ToString(), quantity, 300);
//Save cart
Session[“cart”] = cart;
return RedirectToAction(“YourCart”);
}
public ActionResult YourCart()
{
return View();
}
public ActionResult RemoveItem(int id)
{
ShoppingCart cart = (ShoppingCart)Session[“cart”];
if (cart == null){
cart = new ShoppingCart();
}
cart.RemoveItem(id.ToString());
return RedirectToAction(“YourCart”);
}

public ActionResult Checkout()
{
ShoppingCart cart = HttpContext.Session[“cart”] as ShoppingCart;
//Process your cart

//remove cart
HttpContext.Session.Clear();
return RedirectToAction(“Index”);
}

Code trong Home/Index view

 

idx

Home/Yourcart view

yc

ShoppingCart.cs class

public class ShoppingCart
 {
 // internal member variables
 private String user;
 private DataTable items;
 private Double total;

 // public properties
 public String UserID
 {
 get { return user; }
 set { user = value; }
 }
 public DataTable CartItems
 {
 get { return items; }
 set { items = value; }
 }
 public Double TotalValue
 {
 get { return total; }
 set { total = value; }
 }
 // default constructor
 public ShoppingCart()
 {
 // create an empty shopping cart
 user = String.Empty;
 // create an empty DataTable to hold the cart items
 items = new DataTable("Items");
 items.Columns.Add(new DataColumn("ProductID", Type.GetType("System.String")));
 items.Columns.Add(new DataColumn("Quantity", Type.GetType("System.Int32")));
 items.Columns.Add(new DataColumn("Price", Type.GetType("System.Double")));
 // set total value of the new cart to zero 
 total = 0;
 }
 public void UpdateCart()
 {
 //Update cart code
 }
 public void RemoveItem(string productID)
 {
 DataRow[] rows = items.Select("ProductID='" + productID + "'");
 if (rows.Length > 0)
 {
 items.Rows.Remove(rows[0]);
 }
 }
 // add an item to the cart
 public void AddItem(String proId, Int32 Qty, Double price)
 {
 if (!IsExistItem(proId))
 {
 // create new DataTable row and populate with values - Hàng mới
 DataRow row = items.NewRow();
 row["ProductID"] = proId;
 row["Quantity"] = Qty;
 row["Price"] = price;
 // add row to DataTable update total value
 items.Rows.Add(row);
 total += (Qty * price);
 }
 else
 {
 //tăng số lượng hàng trong giỏ hàng
 for (int i = 0; i < items.Rows.Count; i++)  {  if (items.Rows[i]["ProductID"].Equals(proId))  {  items.Rows[i]["Quantity"] = int.Parse(items.Rows[i]["Quantity"].ToString()) + Qty;  total += (Qty * price);  break;//Exit loop  }  }  }  }  public bool IsExistItem(string proID)  {  bool b = false;  if (items.Rows.Count > 0)
 {
 for (int i = 0; i < items.Rows.Count; i++)
 {
 if (items.Rows[i]["ProductID"].Equals(proID))
 {
 b = true;
 break;//exit loop
 }
 }
 }
 return b;
 }
 // empty the cart by clearing the DataTable
 public void Clear()
 {
 items.Rows.Clear();
 total = 0;
 }
 }

Shopping cart với ASP.NET MVC

  • Tạo dự án mới, chọn loại ASP.NET MVC
  • Sử dụng cơ sở dữ liệu Northwind và tạo Entity model như hình sau

sc

  • Bổ sung các Action method vào HomeController như sau, sau khi hoàn thành, mã nguồn đầy đủ như hình dưới đây:

23

  • Mở view Home/index.cshtml và bổ sung mã sau

@model IEnumerable<ShoppingCart.Models.Product>
@{
ViewBag.Title = “Index”;
}
<h2>Index</h2>

@foreach (var p in Model)
{

Product ID: @p.ProductID
Product ID: @p.ProductName
Product ID: @p.UnitPrice
Product ID: @p.Category.CategoryName

@Html.ActionLink(“Add to cart”, “AddToCart”, “Home”, new { @Id = @p.ProductID }, new { @class = “btn btn-primary” })

</div>
</div>
}
</div>

  • Tạo view mới đặt tên Addtocart và thay đổi mã nguồn như sau

@{
ViewBag.Title = “YourCart”;
}
<h2>YourCart</h2>
@{
var cart = Session[“cart”] as ShoppingCart.Controllers.ShoppingCart;
}
<table>
<tr>
<td>Product ID</td>
<td>Quantity</td>
<td>Price</td>
<td>Action</td>
</tr>

@for (int i = 0; i < cart.CartItems.Rows.Count; i++)
{
<tr>
<td>@cart.CartItems.Rows[i][0].ToString()</td>
<td>@cart.CartItems.Rows[i][1].ToString()</td>
<td>@cart.CartItems.Rows[i][2].ToString()</td>
<td>@Html.ActionLink(“Delete”,”RemoveItem”, “Home”, new { @Id = cart.CartItems.Rows[i][0].ToString() }, new { @class = “btn btn-primary” })</td>
</tr>
}
</table>

  • Chạy thử và kiểm tra kết quả giỏ hàng