我正在尝试使用ajax将对象发送到api,如何解决此问题?
这是我的JavaScript代码:
var order = {
ClientId: 0,
products: []
};
document.querySelector('.btn-order').addEventListener('click', function ()
{
var answer = window.confirm("?");
if (answer) {
orden.ClientId = document.querySelector('.client').value;
console.log(order);
console.log(JSON.stringify(order));
$.ajax({
type: 'POST',
url: '/Orders/Create1',
data: JSON.stringify(order),
contentType: 'application/json; charset=utf-8',
dataType: 'json',
success: function (result) {
alert('success');
},
error: function (result) {
alert(result.responseText);
}
});
}
});
这是控制器代码:
[HttpPost]
[ValidateAntiForgeryToken]
public ActionResult Create([FromBody]Order order)
{
return Json(new { msg = "Success" });
}
Model classes:
public class Order
{
public int ClientId { get; set; }
public List<ProductsOrder> products { get; set; }
}
public class ProductsOrder
{
public int ProductId { get; set; }
public int quantity { get; set; }
public decimal subtotal { get; set; }
}
服务器返回错误,这是浏览器的响应:
POST http://localhost:9019/Orders/Create 500(内部服务器错误)
发送@ jquery.js:9837
ajax @ jquery.js:9434
(匿名)@ Sell.js:30
答案 0 :(得分:1)
order.ClientId = document.querySelector('.client').value;
您需要检查document.querySelector('.client').value
是否为数字值,可能是字符串为空或未定义,以及是否将其发送到控制器。 Model Binding
无法转换为int值。
500(内部服务器错误)出现在控制器操作源代码处。
为了防止投放问题,您可以将int ClientId
更改为int? ClientId
public class Order
{
public int? ClientId { get; set; }
public List<ProductsOrder> products { get; set; }
}