I am using Asp .Net Core 2.2 to create a shopping cart. So, I want to add items on cart when user clicks Add to Cart button. As you can see the below code is working fine. I have checked "mydata" variable is getting all the data but Json.Stringify(data) doesn't passing any data to controller.
$(".addtocart").click(function (event) {
event.preventDefault();
var mydata = {
"CartItemID": $(this).data("pid"),
"Name": $("#name").text(),
"ImageUrl": $("#mainimage").attr("src"),
"Amount": $("#price").val(),
};
$.ajax(
{
url: "/cart/add",
type: "post",
contentType: "application/json",
data: JSON.stringify(mydata)
}
).done(function (addresult) {
$("#cartItemCount").text(addresult.items)
$("#cartItemCountInner").text(result.Items)
});
});
Below is the controller code. Model is showing null:
[HttpPost]
public ActionResult Add(CartItem item)
{
Cart cart = HttpContext.Session.GetObjectFromJson<Cart>("_Cart");
if (cart == null)
cart = new Cart();
cart.Add(item);
HttpContext.Session.SetObjectAsJson("_Cart", cart);
JsonResult result = new JsonResult(new { Items = cart.NumberOfItems });
return result;
}
Please also check the session is used correctly or not because I'm new to Asp .Net Core and don't know much about asp .net core session.
Below is the SessionExtension Code for handling complex object to session:
public static class SessionExtension
{
public static void SetObjectAsJson(this ISession session, string key, object value)
{
session.SetString(key, JsonConvert.SerializeObject(value));
}
public static T GetObjectFromJson<T>(this ISession session, string key)
{
var value = session.GetString(key);
return value == null ? default(T) : JsonConvert.DeserializeObject<T>(value);
}
}