【问题标题】:Asp .Net Core 2.2 - JSON.stringify(data) not workingAsp .Net Core 2.2 - JSON.stringify(data) 不工作
【发布时间】: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


【解决方案1】:

这是一个如下所示的工作演示:

1.型号:

public class CartItem
{
    public int CartItemID { get; set; }
    public string Name { get; set; }
    public string ImageUrl { get; set; }
    public int Amount { get; set; }
}

2.查看:

@model IEnumerable<CartItem>
<table class="table">
    <thead>
        <tr>
            <th>
                @Html.DisplayNameFor(model => model.Name)
            </th>
            <th>
                @Html.DisplayNameFor(model => model.ImageUrl)
            </th>
            <th>
                @Html.DisplayNameFor(model => model.Amount)
            </th>
            <th></th>
        </tr>
    </thead>
    <tbody>
        @foreach (var item in Model)
        {
        <tr>
            <td>
                <div id="name">@item.Name</div>
            </td>
            <td>
                <img id="mainimage" src="@item.ImageUrl" />
            </td>
            <td>
                <input id="price" value="@item.Amount" />
            </td>
            <td>
                <input type="button" class="addtocart" data-pid="@item.CartItemID" value="add to cart"/>
            </td>
        </tr>
        }
    </tbody>
</table>
@section Scripts
{
<script>
    $(".addtocart").click(function (event) {
        event.preventDefault();
        var mydata = {
            "CartItemID": $(this).data("pid"),
            "Name": $("#name").text(),
            "ImageUrl": $("#mainimage").attr("src"),
            "Amount": $("#price").val(),
            };
            console.log(JSON.stringify(mydata));
        $.ajax(
            {
                url: "/cart/add",
                type: "post",
                contentType: "application/json",
                data: JSON.stringify(mydata)
            }
        ).done(function (addresult) {
            $("#cartItemCount").text(addresult.items)
            $("#cartItemCountInner").text(result.Items)
        });
});
</script>
}

3.Controller(您需要将FromBody添加到您的操作中):

    [HttpPost]
    public ActionResult Add([FromBody]CartItem item)
    {
        //...
    }

4.结果:

【讨论】:

    猜你喜欢
    • 2019-10-12
    • 2018-02-04
    • 2021-07-04
    • 1970-01-01
    • 2020-04-28
    • 2019-09-29
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多