【发布时间】:2019-12-07 01:09:25
【问题描述】:
我正在使用 Asp .Net Core 2.2 创建购物车。所以,当用户点击添加到购物车按钮时,我想在购物车上添加商品。如您所见,以下代码运行良好。我检查了“mydata”变量正在获取所有数据,但 Json.Stringify(data) 没有将任何数据传递给控制器。
$(".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)
});
});
以下是控制器代码。模型显示为空:
[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;
}
还请检查会话是否正确使用,因为我是 Asp .Net Core 新手,对 asp .net Core 会话了解不多。
下面是处理复杂对象到会话的SessionExtension代码:
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);
}
}
【问题讨论】:
-
Json.stringify 是多余的。您可以直接发布对象。尝试删除 json.stringify 并直接传递 mydata 对象。还将您的控制器方法更改为
public ActionResult Add([FromBody] CartItem item) -
你在Asp.Net Core的Startup类的Configure方法中配置了JsonSerializerSettings吗? stackoverflow.com/questions/35772387/…
-
能分享一下你的
CartItem模特和风景吗? -
您的问题解决了吗?如果我的回答有帮助,您能accept as answer吗?
标签: c# jquery ajax asp.net-mvc asp.net-core