使用$ .post将对象集合传递给MVC控制器

我们正在尝试使用json和jQuery .post函数将页面中的对象集合发送到控制器(MVC 3)。 下面是我们的js代码以及控制器和对象定义。

问题是,当对象被适当地发送到我们的控制器时,它的成员变量没有被填充。 “Coords”列表具有适当数量的“Coord”对象,但每个Coord对象的成员变量都填充零(非空)而不是我们传入的值。请参见屏幕截图:

任何想法我们的实施有什么问题?

提前致谢!

在此处输入图像描述

Coord1 = { "X": 100, "Y": 200 }; Coord2 = { "X": 300, "Y": 400 }; zoneData = { "Color": "#D8F834", "Name": "new zone", "Coords": [Coord1, Coord2] } $.post("/Demo/SaveZone", zoneData, function (resp) { alert(resp); }, "json"); [HttpPost] public ActionResult SaveZone(ZoneViewModel zvm) { Zone z; z = AutoMapper.Mapper.Map(zvm); _db.Zone.Attach(z); _db.SaveChanges(); return View(); } public class ZoneViewModel { public int Id { get; set; } public string Name { get; set; } public string Color { get; set; } public CoordViewModel[] Coords { get; set; } } public class CoordViewModel { public int Id { get; set; } public int X { get; set; } public int Y { get; set; } } 

可能最简单的方法是使用JSON请求:

 var coord1 = { X: 100, Y: 200 }; var coord2 = { X: 300, Y: 400 }; var zoneData = { Color: '#D8F834', Name: 'new zone', Coords: [ coord1, coord2 ] }; $.ajax({ url: '/Demo/SaveZone', type: 'POST', contentType: 'application/json; charset=utf-8', data: JSON.stringify(zoneData), success: function(resp) { alert(resp); } }); 

JSON.stringify方法将javascript对象序列化为JSON字符串。 它作为本机方法内置于现代浏览器中。 如果要支持没有此方法的旧版浏览器,则需要包含json2.js脚本,该脚本检查浏览器是否本机支持它,如果不支持,则提供实现。

现在一切都应该正确绑定:

在此处输入图像描述

以下是成功请求的样子:

在此处输入图像描述

我猜:

 public List Coords { get; set; } 

(我承认这是在黑暗中拍摄的)