C# 保存对象列表与保存对象(来自 JSON)
本文关键字:保存 对象 JSON 来自 列表 | 更新日期: 2023-09-27 18:35:29
我有以下工作代码:
类(声明的对象)
public class saveRow
{
public int proId { get; set; }
public string proName{get;set;}
}
控制器:
[HttpPost]
public virtual JsonResult SaveRow(saveRow input)
{ /* CODE HERE */}
JavaScript 对象(已发送)
var test = {"proId" : 1, "proName" : "Test"}
JavaScript Ajax Call
$.ajax({
type: "POST",
url: "URL",
dataType: "json",
data: test,
traditional: true,
success: function (data, status, request) {
if (data.Error != undefined) {
alert("System Error: " + data.Error);
$(row).find('*').attr('disabled', false);
return;
}
},
error: function (request, status, error) {
console.log("ERROR");
}
});
现在,当我想发送行列表而不是一次发送一个行列表时,就会出现问题,因此我执行以下操作:
为了测试我拿了相同的对象并完成了
var test2 = []; test2.push(test); test2.push(test);
对象现在看起来像:
[{"proId" : 1, "proName" : "Test"},{"proId" : 1, "proName" : "Test"}]
我的控制器现在看起来像:
[HttpPost]
public virtual JsonResult SaveRow(List<saveRow> input)
{ /* CODE HERE */}
还尝试IEnumberable
将对象列表作为 JSON 发送时,变量输入始终为 null。
但是每次我通过控制器参数发送此列表时,"input"总是为空。
这是为什么呢?
解决-
public virtual JsonResult SaveRow(saveRow[] input)
并添加了内容类型!使用 JSON.stringify!
试试这个方式:
- 为列表设置与参数名称"input"相同的包装器名称
- 设置内容类型
- 删除繁体并使用 JSON.stringify 来字符串化您的数据。
.JS:
var data = { "input": test2 };
$.ajax({
type: "POST",
url: "URL",
dataType: "json",
contentType:"application/json; charset=utf-8", //<--Set content Type
data: JSON.stringify(data), //Set data
success: function (data, status, request) {
if (data.Error != undefined) {
alert("System Error: " + data.Error);
$(row).find('*').attr('disabled', false);
return;
}
},
error: function (request, status, error) {
console.log("ERROR");
}
});