繁体   English   中英

模型绑定绑定我的json数组,但不绑定值

[英]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.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM