javascript - ASP.NET Core - AJAX 数组看起来没有填充并传递给控制器
问题描述
我在使用 AJAX 将数组传递给控制器时遇到问题。
下面是SQL表结构截图:
这是视图
$("body").on("click", "#btnSave", function () {
var items = new Array();
$("#tblItems TBODY TR").each(function () {
var row = $(this);
var item = {};
item.ItemID = row.find("TD").eq(0).html();
item.ProInvoiceNum = row.find("TD").eq(1).html();
item.InvoiceNum = row.find("TD").eq(2).html();
item.ProductNum = row.find("TD").eq(3).html();
item.ItemDiscount = row.find("TD").eq(4).html();
item.ItemAmount = row.find("TD").eq(5).html();
items.push(item);
});
$.ajax({
type: "POST",
url: "/Items/AddItems",
data: JSON.stringify(items),
traditional: true,
contentType: "application/json; charset=utf-8",
dataType: "json",
success: function (r) {
alert(r + " record(s) inserted.");
}
});
});
当我想保存 JSON 数组结果时,控制器返回 0 条记录已添加到 DB。
例如“ItemId”是否应该被解析,因为它是 int 类型并且它是数组中的字符串,对吗?
这是控制器中的帖子操作
[HttpPost]
public IActionResult AddItems([FromBody]IEnumerable<Items> items)
{
//Loop and insert records.
foreach (Items item in items)
{
_context.Items.Add(item);
}
int insertedRecords = _context.SaveChanges();
return Json(insertedRecords);
}
我非常感谢对此的任何帮助,我尝试以多种方式解决此问题,但现在我的大脑被解决此问题的可能想法所阻塞。
如果您需要更多详细信息,请告诉我。
解决方案
我认为问题在于您的某些属性不是字符串类型,因此在模型绑定时没有正确设置它们。
我会命名类项目而不是项目,因为这是实体框架使用的约定。查看您的表结构,您的项目类应该被定义为这样的
public class Item
{
public int ItemID { get; set; }
public string ProInvoiceNum { get; set; }
public string InvoiceNum { get; set; }
public string ProductNum { get; set; }
public byte ItemDiscount { get; set; }
public int ItemAmount { get; set; }
}
您遇到的问题是模型绑定器发送的 JSON 包含字符串和带有一些整数的模型。我认为最简单的解决方案是在客户端使用 parsInt 方法。换句话说,将您的项目填充行更改为此
item.ItemID = parseInt(row.find("TD").eq(0).html());
item.ProInvoiceNum = row.find("TD").eq(1).html();
item.InvoiceNum = row.find("TD").eq(2).html();
item.ProductNum = row.find("TD").eq(3).html();
item.ItemDiscount = parseInt(row.find("TD").eq(4).html());
item.ItemAmount = parseInt(row.find("TD").eq(5).html());
然后你的 JSON 将在它需要的地方包含数字而不是字符串。
推荐阅读
- python - 网络流量优化 (Gurobi)
- c# - C# 一个 if 语句中有多个布尔值
- android - 线图数据点显示的距离很大
- php - 使用 volley 从 android 应用程序将数据插入 mysql 数据库
- python - python-telegram-bot:如何在更改代码并重新运行后保持机器人工作
- python - 将最后一行 n 次添加到时间索引数据框,同时每次将日期增加 1 天
- reactjs - 异步定义 HOC
- r - 评估父框架和当前框架
- android - 如何从 Web 服务将 ViewPager 中的片段添加到 TabLayout?
- spring-mvc - 如何在 Spring MVC 上制作一个禁止直接请求但允许服务器请求的方法?