该购物车是用 Ajax 访问 Control 内的方法做的, 因此会频繁访问数据库(反真我做的是毕业设计。。。哈哈)
其实,对于以前熟悉 了webforms 的我来说,要用新的思路做东西,我的内心是拒绝的。。
1.购物车表图
2.AJAX 访问Control
var jsonData = "{\"albumId\":\"" + $("#_number").text() + "\", \"quantity\":\""+ $("#qunatity").val() + "\"}";//购买量+专辑ID
$.ajax({
type:"post",
dataType: "text",
contentType: "application/json",
url: "/Cart/CartAdd",//访问的方法
data: jsonData,
success: function (data) {
alert(data);
},
//error: function (XMLHttpRequest, textStatus, errorThrown) {
// alert(XMLHttpRequest.status);
// alert(XMLHttpRequest.readyState);
// alert(textStatus);
//}
});
3.Control 对应方法
[HttpPost]
public string CartAdd(string albumId,string quantity//一直不明白怎么才能接收JSON 并解析,求大神教育
{
int Id = int.Parse(albumId);
int num = int.Parse(quantity);
int cartid=0;
string username = Session["username"].ToString();
tb_cartDetails cartDetail = new tb_cartDetails();
int storage = (from al in musicDB.tb_album
where al.albumId == Id
select al.leftNum).Single();
if (num >storage||num==storage)
return "库存不足,无法完成添加";
SqlParameter uname = new SqlParameter("@username", username);
var cart = musicDB.Database.SqlQuery<tb_cart>(
"exec proc_userid @username", uname
).Single();
cartid = cart.cartId;
int count = musicDB.tb_cartDetails.Where(cd=>cd.cartId==cartid).Count();//判断购物车内物品是否有物品
if (count == 0)
{
try
{
cartDetail.cartId = cartid;
cartDetail.albumId = Id;
cartDetail.quantity = num;
musicDB.tb_cartDetails.Add(cartDetail);//不存在则添加
musicDB.SaveChanges();
}
catch(Exception e) {
throw e;
}
}
else
{
int c = (from cd in musicDB.tb_cartDetails
where cd.cartId==cartid&&cd.albumId==Id
select cd).Count();
if (c > 0)
{
try
{
var album = musicDB.tb_cartDetails.Where(aid => aid.albumId == Id).Single();//已存在物品,则对应物品数量更新
album.quantity += num;
musicDB.SaveChanges();
}
catch (Exception e){
throw e;
}
}
}
return "商品添加成功";