我在mvc中制作了一个简单的购物车示例。
我点击Add to cart
范围后,我正在做的是调用控制器操作方法。
然后使用购物车中的商品总数来更新Cookie值。但它给了我cookie的初始值。
这是我调用Controller Action的Ajax代码
$(document).delegate('.addCart','click', function () {
var getId = parseInt($(this).attr('id').slice(3));
$.ajax({
type: 'GET',
contentType: 'application/json; charset=utf-8',
url: '/Comments/CartDetailsSetGet',
data: { Id: getId },
success: function (data) {
var count = parseInt(data);
if (isNaN(count)){
alert(data);
}else{
var getCookies= @HttpContext.Current.Request.Cookies["CartCookie"].Value;
$('.cartNum').html(getCookies);
}
},
error: function (data) {
alert("Error In Adding Item To Cart");
}
});
});
span > with class cartNum
我在其中显示购物车中的商品总数。
addCart
是我点击添加购物车内商品的范围。
这是我的操作方法,这是我的默认操作
HttpCookie ck = new HttpCookie("CartCookie");
public ActionResult Index()
{
if (Request.Cookies["CartCookie"] == null)
{
ck.Value = "0";
Response.SetCookie(ck);
}
IList<Comment> commentList = db.Comments.ToList();
return View(commentList);
}
此操作在Ajax请求中被调用。
static List<int?> CartItemsId = new List<int?>();
public string CartDetailsSetGet(int? Id)
{
if (CartItemsId.Contains(Id) != true)
{
CartItemsId.Add(Id);
int getCount = CartItemsId.Count();
System.Web.HttpContext.Current.Request.Cookies["CartCookie"].Value = getCount.ToString();
ck.Expires = DateTime.Now.AddDays(-1);
var d = "";
if (System.Web.HttpContext.Current.Request.Cookies["CartCookie"] != null)
{
d = System.Web.HttpContext.Current.Request.Cookies["CartCookie"].Value;
}
return d.ToString();
}
else
{
return "This Item Is Already In Cart";
}
}
这里d
我得到更新的cookie值,但是在Ajax Success中,这一行给出了初始值,即0。
var getCookies= @HttpContext.Current.Request.Cookies["CartCookie"].Value;
答案 0 :(得分:2)
在您的脚本中,var getCookies = '@HttpContext.Current.Request.Cookies["CartCookie"].Value'
是razor代码,在浏览器之前被解析为服务器端。如果您检查页面源,您将看到getCookies的值已设置为&#34; 0&#34;。
不是尝试设置或更新cookie,而是返回包含您要呈现的值的CartDetailsSetGet
中的JSON数据,例如
public JsonResult CartDetailsSetGet(int? Id)
{
if (CartItemsId.Contains(Id) != true)
{
....
int getCount = CartItemsId.Count();
var data = new { count = getCount , message = "some message" };
return Json(data, JsonRequestBehavior.AllowGet);
}
{
var data = new { count = null, message = "This Item Is Already In Cart" };
return Json(data, JsonRequestBehavior.AllowGet);
}
}
脚本
$.ajax({
....
success: function (data) {
if (data.count) {
$('.cartNum').html(data.count);
} else {
alert(data.message);
}
},
....