[英]Model binding is binding my json array, but not the values
我正在使用ASP.NET MVC 3,并且正在尝试将简单的json数组模型绑定到List<JsonPositions>
。 JsonPositions
是一个自定义对象,其属性与数组中的json对象相同。
这是我的数组在客户端上的样子:
var widgetPositions = [
{ col: 5, row: 1, id: 2 },
{ col: 4, row: 5: id: 40 }
];
$.ajax({
url: 'the url',
data: { positions: widgetPositions },
success: function () {
alert('Save successful.');
},
error: function () {
alert('An error occurred while trying to update the widget positions.');
}
});
在Chrome中检查请求后,此代码似乎可以正常工作。
在控制器中,我们具有以下操作方法:
public void UpdatePositions(List<JsonPosition> positions)
{
// debugging here
}
当我检查widgetPositions
列表时,它确实有两个项目,就像json数组一样,但是对象的属性与客户端上对象的值不匹配。 这是对象JsonPosition
样子:
public class JsonPosition
{
public int id { get; set; }
public int col { get; set; }
public int row { get; set; }
}
谢谢你尽你所能的帮助 :)
我认为您可能需要添加内容类型:
$.ajax({
url: 'the url',
data: JSON.stringify({ positions: widgetPositions }),
contentType: 'application/json',
success: function () {
alert('Save successful.');
},
error: function () {
alert('An error occurred while trying to update the widget positions.');
}
});
另外,您没有指定请求类型,因此默认情况下它将执行GET,您是要执行POST吗? 那会做到的
$.ajax({
url: 'the url',
type: 'POST',
data: JSON.stringify({ positions: widgetPositions }),
contentType: 'application/json',
success: function () {
alert('Save successful.');
},
error: function () {
alert('An error occurred while trying to update the widget positions.');
}
});
您可以将它们作为JSON对象发送:
var widgetPositions = [
{ col: 5, row: 1, id: 2 },
{ col: 4, row: 5: id: 40 }
];
$.ajax({
url: 'the url',
data: JSON.stringify({ positions: widgetPositions }),
contentType: 'application/json',
success: function () {
alert('Save successful.');
},
error: function () {
alert('An error occurred while trying to update the widget positions.');
}
});
需要注意的事情是您的代码中没有,这将使它起作用:
contentType: 'application/json',
-设置适当的请求内容类型标头 data: JSON.stringify({ positions: widgetPositions })
-发送JSON请求 现在,您将在这里愉快地获得所需的一切:
public void UpdatePositions(List<JsonPosition> positions)
{
// debugging here
}
备注: JSON.stringify
方法是在所有现代浏览器中本地定义的(即使在IE8中也是如此,即使它远非现代浏览器)。 但是,如果您需要支持某些史前浏览器,则可以在页面中包含json2.js脚本,该脚本将检查浏览器是否本机支持此方法,以及是否提供实现。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.