ajax post 到 mvc 控制器,所有值为空

ajax post to mvc controller, all values are null

我正在使用 ASP.Net 核心 MVC 构建一个订单跟踪应用程序。我有一个显示所有订单的 table,我正在尝试对其中三列进行内联编辑。我正在尝试使用 ajax 将编辑后的值 post 发送到我的控制器,但控制器似乎没有收到任何东西。

var orderUpdate = {};
orderUpdate.Id = row.find(".Id").html();
orderUpdate.Responsible = row.find(".Responsible").find("span").html();
orderUpdate.Comments = row.find(".Comments").find("span").html();
orderUpdate.Promise_Date = row.find(".Promise_Date").find("span").html();
console.log(orderUpdate);
$.ajax({
     type: "POST",
     url: "/Orders/UpdateOrder",
     data: '{order:' + JSON.stringify(orderUpdate) + '}',
     contentType: "application/json; charset=utf-8",
});

这是我的控制器中的方法,当我编辑值时,console.writeline 为 Id 打印 0 而没有为其他属性打印任何内容。

[HttpPost]
public ActionResult UpdateOrder(Order x)
{
    Console.WriteLine(x.Id);
    Console.WriteLine(x.Responsible);
    Console.WriteLine(x.Comments);
    Console.WriteLine(x.Promise_Date);

    //Order updatedOrder = (from o in _context.Orders where o.Id == order.Id select o).FirstOrDefault();
    //updatedOrder.Responsible = order.Responsible;  
    _context.SaveChangesAsync();
    return new EmptyResult();
}

这些是我模型的相关部分

 public class Order
    {
        public int Id { get; set; }
        public string Responsible { get; set; }
        public string Comments { get; set; }
        [DataType(DataType.Date)]
        public DateTime? Promise_Date { get; set; }
        ...
    }

当你想将json数据传递给控制器​​时,你需要使用[FromBody]

这是一个有效的演示:

控制器:

        [HttpGet]
        public IActionResult UpdateOrder()
        {
            return View();
        }
        [HttpPost]
        public ActionResult UpdateOrder([FromBody]Order order)
        {

            return new EmptyResult();
        }

查看:

@{
    ViewData["Title"] = "UpdateOrder";
}

<h1>UpdateOrder</h1>
<button onclick="submit()">submit</button>
@section scripts{
    <script type="text/javascript">
        function submit() {
            var orderUpdate = {};
            orderUpdate.Id = 1;
            orderUpdate.Responsible = "Responsible";
            orderUpdate.Comments = "Comments";
            var order = JSON.stringify(orderUpdate);
            $.ajax({
                type: "POST",
                url: "/Test/UpdateOrder",
                data: order,
                contentType: "application/json; charset=utf-8",
            });
        }
    </script>
}

结果:

post正文错误

data: '{order:' + JSON.stringify(orderUpdate) + '}'

您将得到一个 json 字符串:{order:{}}。它不是 JSON 字符串而是 JS 对象。

您应该使用 JSON.stringify({order: orderUpdate})

序列化整个对象