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})
序列化整个对象
我正在使用 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})