Cart Management | C# ASP.Net MVC
Step 1 Model
public class CartModel
{
public string CID { get; set; }
public List<CartProductModel> Cart { get; set; }
public string Total { get; set; }
public string UID { get; set; }
public string Discount
{ get; set; }
}
public class CartProductModel
{
public string ID { get; set; }
public string
ProductID { get; set; }
public string
ProductName { get; set; }
public string Price { get; set; }
public string Qty { get; set; }
}
Step 2 Add to Cart
function AddtoCart(pid, pname, price, proqty)
{
FlagSID = true;
var Lecob =
{
ProductID: pid,
ProductName: pname,
Price: price,
Qty: $("#" + proqty).val()
}
$.ajax({
url: '/Home/AddToCart/',
dataType: "json",
async: false,
type: "POST",
contentType: 'application/json; charset=utf-8',
data: JSON.stringify(Lecob),
success: function (data)
{
if (data.sMessage == "1")
{
window.location.href = "/Home/cart";
}
else
{
alert(data.sMessage);
}
}
});
}
Controller JSON function
public JsonResult AddToCart(CartProductModel product)
{
if (Session["Cart"] == null) // When cart is null
{
CartModel ob = new CartModel();
Random r = new Random();
ob.Cart = new List<CartProductModel>();
ob.CID = r.Next(1,
100).ToString();
ob.Cart.Add(SetCartProduct(product.ProductID,
product.ProductName, product.Price, product.Qty));
ob.Total = product.Price;
Session["Cart"] = ob;
return Json(new {
sMessage = "1",
JsonRequestBehavior.AllowGet });
}
else
{
//if cart have item
// Read cart from session and store into Cart model object CartModel OldCart =
(CartModel)Session["Cart"];
// Get all products from cart into product model List<CartProductModel>
data = ((CartModel)Session["Cart"]).Cart; var index = data.FindIndex(e => e.ProductID == product.ProductID); // find current product is exist in cart
if (index == -1) // product is not exist in cart
{
OldCart.Cart.Add(SetCartProduct(product.ProductID, product.ProductName,
product.Price, product.Qty));
Session["Cart"] = OldCart;
OldCart.Total =
Convert.ToString(Convert.ToInt32(OldCart.Total) +
(Convert.ToInt32(product.Price) * Convert.ToInt32(product.Qty)));
return Json(new { sMessage = "1", JsonRequestBehavior.AllowGet });
}
else //if product is exist in cart
{
int oqty = 0;
oqty =
Convert.ToInt32(data[index].Qty);
oqty +=
Convert.ToInt32(product.Qty);
data[index].Qty =
oqty.ToString();
return Json(new { sMessage = "1", JsonRequestBehavior.AllowGet }); }
}
}
// Add an item into cart
protected CartProductModel SetCartProduct(string id, string name, string price, string qty)
{
CartProductModel ob = new CartProductModel();
ob.ProductID = id;
ob.ProductName = name;
ob.Price = price;
ob.Qty = qty;
return ob;
}
Show Products
HTML
<img src="~/img/100.jpg" />
<br /><br />
<strong>PID : </strong> 100 <br />
<strong>Maharaza
Chair</strong> <br />
<strong>Price : </strong>
123 <br />
<strong>Qty : </strong><input type="number" value="1" min="1" max="10" id="q100">
<br /><br />
<a href="/home/product?pid=100&nm=Maharaza
Chair&price=123">
<input type="button" value="View Product" class="btn
btn-success" />
</a>
<input type="button" value="Add to Cart" class="btn btn-primary" onclick="AddtoCart('100','Maharaza Chair','123','q100')" />
Show a single product
HTML
<div class="row">
<div class="col-md-6">
<img src="@string.Concat("/img/",Request.QueryString["pid"],".jpg")"
/>
</div>
<div class="col-md-6">
<h1>@Request.QueryString["nm"]</h1><hr />
<strong>Price : </strong> @Request.QueryString["price"] <br /><br />
<input type="number" value="1" min="1" max="10" id="qty"><br /><br />
<input type="button" value="Add to Cart" class="btn
btn-primary" onclick="AddtoCart('@Request.QueryString["pid"]','@Request.QueryString["nm"]','@Request.QueryString["price"]', 'qty')" />
</div>
/div>
Step 3 Modify Cart
HTML
<input type="number" value="@item.Qty" style="width:50px" id="@string.Concat("qty",item.ProductID)" onchange="ChangeCount('@item.ProductID','@item.ProductName','@item.Price','@string.Concat("qty",item.ProductID)','@string.Concat("qty",item.ProductID)');ProductAlter('@string.Concat("price",item.ProductID)','@string.Concat("qty",item.ProductID)', '@string.Concat("tot",item.ProductID)')" />
Javascript Function
function ChangeCount(pid, productname, price, qty)
{
if (parseInt($("#" + qty).val()) > 0)
{
window.location.href = "/home/ChangeCartCount?pid=" + pid + "&name=" + productname + "&price=" + price + "&qty=" + $("#" + qty).val();
}
else
{
alert("0
Quantity is not allowed.")
$("#" + qty).val('1');
}
}
Json function ChangeCartCount on Home controller to handle cart modification request
public ActionResult ChangeCartCount(string pid, string name, string price, string qty)
{
CartModel OldCart =
(CartModel)Session["Cart"];
List<CartProductModel> data =
((CartModel)Session["Cart"]).Cart;
int oqty, oprice, ototal;
var index = data.FindIndex(e => e.ProductID == pid);
oqty =
Convert.ToInt32(data[index].Qty);
oprice =
Convert.ToInt32(data[index].Price);
ototal =
Convert.ToInt32(OldCart.Total);
ototal = ototal - (oqty * oprice);
ototal += Convert.ToInt32(qty) *
Convert.ToInt32(price);
OldCart.Total = ototal.ToString();
data[index].Price = price;
data[index].Qty = qty;
return RedirectToAction("cart", "home");
}
Step 4 (Delete an item from cart)
HTML
<a href="/home/DelCartItem?pid=@item.ProductID" onclick="return confirm('Are you sure to delete this product')">
<input type="button" value="Delete" class="btn-danger
btn" /> </a>
Json function DelCartItem on Home controller to delete an item from cart.
public ActionResult DelCartItem(string pid)
{
List<CartProductModel> data =
((CartModel)Session["Cart"]).Cart;
string tot = data.ElementAt(data.FindIndex(e => e.ProductID ==
pid)).Price; string qty = data.ElementAt(data.FindIndex(e => e.ProductID ==
pid)).Qty; data.RemoveAt(data.FindIndex(e
=> e.ProductID == pid));
if (data.Count == 0) // when only item in cart
{
Session["Cart"] = null;
}
else
{
CartModel OldCart =
(CartModel)Session["Cart"];
Session["Cart"] = OldCart;
OldCart.Total =
Convert.ToString(Convert.ToInt32(OldCart.Total) - (Convert.ToInt32(tot) *
Convert.ToInt32(qty)));
}
return RedirectToAction("cart", "home");
}
No comments:
Post a Comment