将int列表从JavaScript传递到C#——我得到了列表,但它是空的;表单数据是';t结构正确
本文关键字:列表 表单 数据 结构 JavaScript int | 更新日期: 2023-09-27 18:28:22
我的数组填充如下:
updateLabels: function () {
var diagrams = _stage.diagramLayer.getChildren();
var componentIDs = new Array();
for (var index = 0; index < diagrams.length; index++) {
componentIDs.push(diagrams[index].componentID);
}
var self = this;
$.ajax({
url: '../PlanView/UpdateDiagrams',
type: 'POST',
data: { ComponentIDs: JSON.stringify(componentIDs), RackInfo: $('#RackInfoSelect').val() },
success: function (data) {
console.log('success');
},
error: function () {
console.log("error");
}
});
},
服务器端我有这种方法:
[CompressionFilterAttribute]
public JsonResult UpdateDiagrams(List<int> componentIDs, string rackInfo)
{
List<object> diagramInformation = new List<object>(componentIDs.Count());
}
我的数据在网络上传递:
ComponentIDs:[74,445,732,351,348,347,1123,599,600,1053,350,601,602,603,332,99,877,919,349,348,347,347,349,348]
RackInfo:Equipment Weight
我成功地获得了RackInfo,如果我将UpdateDiagrams更改为预期List<string>
,那么我会得到一个包含一个项目的列表,即整个ComponentID字符串。
我在这里做错了什么?
编辑:我在MVC3下工作。当传递到我的控制器时,我应该能够利用某种自动反序列化,我只是不确定如何。
解决方案:解决方案是将我的数据对象封装在JSON.stringify中,而不仅仅是componentID。尽管我可以在服务器端获得RackInfo变量,而无需将其转换为JSON。
如果您希望发布的数据是JSON格式,那么可以尝试这样的方法。MVC应该能够在服务器端自动取消序列化。
$.ajax({
url: '../PlanView/UpdateDiagrams',
type: 'POST',
contentType: 'application/json',
data: JSON.stringify({
componentIDs: componentIDs,
rackInfo: $('#RackInfoSelect').val()
}),
success: function (data) {
console.log('success');
},
error: function () {
console.log("error");
}
});
(我目前无法测试它,但即使它不是完全没有错误,也希望它能正确运行。)
您正在发送一个包含字符串列表的字符串。当它到达服务器时,需要对字符串进行反序列化。
[CompressionFilterAttribute]
public JsonResult UpdateDiagrams(string ListcomponentIDs, string rackInfo)
{
List<int> componentIDs = (from string s in ListcomponentIDs.Split(',')
select Convert.ToInt32(s)).ToList<int>();
}
我把参数改成了字符串。当您将它作为int列表时,它是一个空列表,因为您没有传递int列表。
此外,在JS中,您不需要序列化数组,只需对其调用ToString即可:
data: { ComponentIDs: componentIDs.toString() ...
这样数据就不包括括号[]。
让我知道这是怎么回事。
我还没能用ASP.NET MVC测试它,但如果你删除了JSON.stringify,一切都应该正常工作。这是没有JSON.stringify:的表单数据
- 组件ID[]:10
- 组件ID[]:20
- 组件ID[]:30
- RackInfo:设备重量
这是将数组发布到服务器的正常方式。
使用JSON.stringify:
- 组件ID:[10,20,30]
- RackInfo:RackInfo
对JSON.stringify的调用将数组转换为字符串"[10,20,30]",因此您将向控制器发布一个字符串。