ajax post到mvc控制器,所有值都是空的。

问题描述 投票:0回答:1

我正在使用ASP.Net Core MVC构建一个订单跟踪应用程序。我有一个显示所有订单的表格,并试图实现对其中三列的在线编辑。我试图使用ajax将编辑后的值发布到我的控制器中,但控制器似乎没有收到任何东西。

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",
});

下面是我的控制器中的方法,当我编辑值时,控制台的写线打印出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; }
        ...
    }
ajax asp.net-mvc asp.net-core asp.net-ajax
1个回答
0
投票

当你想把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>
}

结果。enter image description here


0
投票

帖子主体是错误的。

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

你会得到一个json字符串。{order:{}}. 这不是一个JSON字符串,而是一个JS对象。

你应该将整个对象序列化,用 JSON.stringify({order: orderUpdate})

© www.soinside.com 2019 - 2024. All rights reserved.