javascript - ASP.NET Core - 控制器未从 Ajax 接收完整的 JavaScript 数组对象
问题描述
我有一个 JS 对象数组,我将 ajax 传递给控制器。如果我在数组中传递最多 11 个对象,控制器会接收该数组,但如果对象超过 11 个,它会将数组接收为空。就这个。
在控制器中,我将收到传递的员工数组,如下所示。
但是如果我传递一个大的 JavaScript 数组对象,它的值为 null。
我有一个包含 50 个对象的数组。我已经测试了所有这些。该对象与模型属性匹配。模态没有任何问题。
请告诉我我在这里做错了什么。
这是我的 JS 代码。基本上,我正在尝试读取 csv 文件并将所有数据推送到 javascript 数组。javascript 数组具有与模型字段名称相同的属性。
let employees = [];
let reader = new FileReader();
$("#btnSave").click(function () {
Save();
})
$("#file").change(function (e) {
//getting the uploaded file
let fileUpload = $("#file").get(0)
let file = fileUpload.files[0];
//load the reader
reader.onloadend = function (evt) {
let lines = evt.target.result;
if (lines && lines.length > 0) {
let allRows = CSVToArray(lines);
let header = allRows[0];
let thead = $('thead tr')
thead.html("")
let tbody = $('tbody')
header.forEach(h => thead.append(`<th>${h}</th>`))
for (let i = 1; i < allRows.length; i++) {
tbody.append('<tr>')
let cellArr = allRows[i];
let emp = {}
for (let k = 0; k < cellArr.length; k++) {
emp[allRows[0][k]] = cellArr[k] + "";
tbody.append(`<td>${cellArr[k]}</td>`)
}
tbody.append('</tr>')
employees.push(emp)
}
}
}
reader.readAsBinaryString(file)
})
function CSVToArray(strData, strDelimiter) {
strDelimiter = (strDelimiter || ",");
let objPattern = new RegExp(
(
"(\\" + strDelimiter + "|\\r?\\n|\\r|^)" +
"(?:\"([^\"]*(?:\"\"[^\"]*)*)\"|" +
"([^\"\\" + strDelimiter + "\\r\\n]*))"
),
"gi"
);
let arrData = [[]];
let arrMatches = null;
while (arrMatches = objPattern.exec(strData)) {
let strMatchedDelimiter = arrMatches[1];
let strMatchedValue = [];
if (strMatchedDelimiter.length && (strMatchedDelimiter != strDelimiter)) {
arrData.push([]);
}
if (arrMatches[2]) {
strMatchedValue = arrMatches[2].replace(new RegExp("\"\"", "g"), "\"");
} else {
strMatchedValue = arrMatches[3];
}
arrData[arrData.length - 1].push(strMatchedValue);
}
return (arrData);
}
function Save() {
console.log( employees)
if (employees.length > 0) {
$.ajax({
url: '/Master/SaveMaster',
type: 'POST',
contentType: 'application/json; charset=utf-8',
dataType: 'json',
data: JSON.stringify(employees),
success: function (result) {
/*for (let k = 0; k < result.length; k++) {
$('tbody tr:eq(' + (result[k].employeeId - 1) + ')').css('border', '3px solid #dc3545');
let props = Object.entries(employees[result[k].employeeId])
console.log(result[k])
let cellIndex = props.findIndex(p => p[0] === result[k].field)
$('tbody tr:eq(' + (result[k].employeeId - 1) + ') td:eq(' + cellIndex + ')').css({ 'background-color': '#dc3545', 'color': '#ffffff' });
$('tbody tr:eq(' + (result[k].employeeId - 1) + ') td:eq(' + cellIndex + ')').attr("title", result[k].error)
}
$(".main-container").append(`
<div class="alert alert-success alert-dismissible fade show" role="alert">
Data Successfully imported into the database
</div>
`)*/
},
error: function (result) {
console.log(result)
}
})
}
else {
alert("No Data Found.");
}
}
这是我的控制器
[Route("/Master/SaveMaster")]
[HttpPost]
public List<MasterError> SaveMaster(List<MasterData> masterData)
{
List<MasterError> masterErrorsList = new List<MasterError>();
//for(int i = 0; i < masterData.Count(); i++)
//{
//Employee employee = new Employee();
//employee.ArabicName = masterData[i].ArabicName;
//employee.Code = masterData[i].Code;
//employee.Email = masterData[i].Email;
//employee.FirstName = masterData[i].FirstName;
//employee.LastName = masterData[i].LastName;
//employee.MiddleName = masterData[i].MiddleName;
//employee.Mobile = masterData[i].Mobile;
//employee.PassportName = masterData[i].PassportName;
//employee.PassportNo = masterData[i].PassportNo;
//employee.ResidentId = masterData[i].QatarID;
//checkModel(employee);
//}
return masterErrorsList;
}
解决方案
上面的答案对我不起作用(可能是我的数组的大小更大),但以下答案有效。
[Route("/Master/SaveMaster")]
[HttpPost]
[RequestFormLimits(ValueCountLimit = int.MaxValue)]
public List<MasterError> SaveMaster([FromForm] List<MasterData> masterData)
这就是我必须做的一切才能让它完美地工作!
推荐阅读
- docker - 使用单个 -f 标志在 **docker compose** 中传递多个撰写文件
- amazon-web-services - AWS 中使用 X-Ray 的集中式日志记录架构
- android - Android 通知 MediaStyle 忽略正在进行的标志
- button - 如何在 Material UI 快速拨号按钮中添加文本?
- python - Seabron lmplot 使用 scipy 添加 Rsquarred 注释
- javascript - 我们如何使用 mongodb 在 Express js 中创建自动生成的自定义用户 ID
- nginx - NGINX 基本身份验证 url 显示 https 但浏览器在登录之前说不安全?
- excel - 是否有可以根据数据验证输入引用数据的excel函数?
- amazon-web-services - 数组必须是矩阵问题,aws pagemaker kmeans
- azure - 如何使用 azure 存储连接字符串获取 azure 存储的 azure 资源 ID