我们正在尝试使用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<ZoneViewModel, Zone>(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; }
}
答案 0 :(得分:13)
最简单的可能是使用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脚本,该脚本检查浏览器是否本机支持它,如果不支持,则提供实现。
现在一切都应该正确绑定:
以下是成功请求的样子:
答案 1 :(得分:0)
我的猜测:
public List<CoordViewModel> Coords { get; set; }
(我承认这是一个黑暗中的镜头)