我正在使用 jQuery 1.9.1 和 MVC 4。
我有以下 javascript:
$.ajax({
url: '/Home/doSomething',
type: 'POST',
data: JSON.stringify({ devices: [{ Id: 123, Name: "something", MapName: "map" },{ Id: 321, Name: "a name", MapName: "another map" }] }),
dataType: 'json',
contentType: 'application/json'
}
以及我的 HomeController 中的以下 c#:
[HttpPost]
public string doSomething( Device[ ] devices )
{
//stuff consuming that array
}
Device 类的定义如下:
[Serializable]
public class Device
{
public long Id;
public string Name;
public string MapName;
}
根据调试器,设备数组是一个 2 元素数组,每个设备元素的所有属性都为空。
根据chrome,post数据是这样的:
{
"devices": [
{
"Id": 123,
"Name": "something",
"MapName": "map"
},
{
"Id": 321,
"Name": "a name",
"MapName": "another map"
}
]
}
这里有什么问题让 MVC 上下发誓这些对象是空的,但仍然给我一个适当长度的数组?
我试过直接发布数组,而不是调用 JSON.stringify 。我已经尝试将数组作为一个名为“设备”的属性发布在一个对象内,但又没有对其进行区分。我已经尝试将数组作为一个名为“设备”的属性发布在一个对象中,同时只对数组本身进行字符串化。
所有这些都会导致一种或另一种形式的不良行为。要么 chrome 没有首先发布适当的数据,要么 MVC 没有反序列化它。
我已经在网上搜索过,似乎找不到任何应该破坏它的例子。
编辑 2013-02-21 13:12 UTC-5:
我也尝试过不使用 JSON 并让 jQuery 将其作为表单数据发布。这是代码:
var postData = { devices: [{ Id: 123, Name: "something", MapName: "map" }, { Id: 321, Name: "a name", MapName: "another map" }] };
$.ajax({
url: '/Home/doSomething',
type: 'POST',
data: postData
});
C# 还是和上面一样。
不过,该行为仍然与使用 JSON 时相同。MVC 看到一个包含 2 个元素的数组,但该数组中对象的所有值都是默认值(整数为 0,字符串为 null)。