我正在创建一个网络应用,其中我有一个类似于以下的模型
public class Data
{
public int ID { get; set; }
public string Name { get; set; }
public int[] Routes { get; set; }
}
在我的javascript中我有像
这样的数据var Routes = [];
for (var a = 0; a < 5; a++) {
Routes.push(a);
}
var model = {
ID: 1,
Name: 'TEST',
Routes: JSON.stringify(Routes)
};
在我的ajax调用中它看起来像
Data: model
但我的 Routes
正在转换为字符串
如果我写
var model = {
ID: 1,
Name: 'TEST',
Routes: Routes
};
然后
模型中的**int[] Routes**
显示为null
如果我写
contentType:“json”,
在我的Ajax调用中,
我模型的数据显示为空
如果我想要一个int数组并且不想将其转换为字符串
,我该怎么办?答案 0 :(得分:0)
您尚未分享使用ajax发送数据的方式。所以我正在做一些假设并给你一个可以帮助你的通用答案。
JSON.stringify
方法将javaScript对象转换为相应的JSON字符串。因此,当您执行第JSON.stringify(Routes)
行时,您会得到一个值为[0,1,2,3,4]
的字符串。所以基本上你试图发送的JSON对象看起来像这样
{
"ID": 1,
"Name": "TEST",
"Routes": "[0,1,2,3,4]"
}
您可以看到Routes
属性值是字符串,而不是int数组。当此数据发送到服务器时,默认模型绑定器将其视为字符串(可以包含任何内容),并且无法将其映射到int数组。
您应该做的是,将Routes
属性值设置为int数组。通过ajax发送数据时,您可以使用JSON.stringify
将整个json对象转换为它的等效字符串,并使用结果字符串作为ajax调用的data
属性,同时指定{{1}标头值为content-type
。
application/json
var routes = [];
for (var a = 0; a < 5; a++) {
routes.push(a);
}
var model = { ID: 1, Name: 'TEST', Routes: routes };
$.ajax({
url: "/YourUrlToYourActionMethodAjaxPost",
type: "POST",
data: JSON.stringify(model),
contentType: "application/json"
}).done(function (result) {
console.log('result', result);
}).fail(function(a, b, c) {
console.log(a);
});
行将在请求字符串值中生成以下字符串,这就是我们发送给服务器的内容。
JSON.stringify(model)
假设你有一个使用{"ID":1,"Name":"TEST","Routes":[0,1,2,3,4]}
类作为参数类型的动作方法,这应该可行。
Data