我正在使用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; }
}
感谢您提供的任何帮助:)
答案 0 :(得分:3)
我认为您可能需要添加内容类型:
$.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.');
}
});
答案 1 :(得分:2)
您可以将它们作为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脚本,该脚本将检查浏览器是否本机支持此方法,如果不提供实现。