0

模型绑定没有像我想象的那样工作。我以为我可以制作一个对象数组并将其传递给 $.post 但不,没那么容易。

这就是我想做的

var a=new Array();
a[0]={
    Name:"Eric",
    Email:"eric@yahoo.com"
}

a[1]={
    Name:"Peter",
    Email:"peter@gmail.com"
}

$.post("/Home/SendPersons", a, function (data, status) {
    $("#someid").html(data);
});

在我的控制器中:

public ActionResult SendPersons(IList<Person> persons) {
    //Do stuff
    return PartialView("Persons");
}

但参数为空。我该如何正确地做到这一点?

4

1 回答 1

2

您需要确保的几件事:

根据 Meryovi 提供的链接,确保您尝试绑定的字段具有所有适当的{ get; set; }字段,否则 ModelBinder 将无法工作。(如果你想让别人看一下,你可以在你的问题中发布你的 Person 模型。)

此外,请确保您发送的是真正的 JSON 请求。您可以通过编写以下代码来做到这一点:

$.ajax({
    url: '/Home/SendPersons',
    type: 'POST',
    dataType: 'json',
    contentType: 'application/json',
    data: JSON.stringify({ persons: a }),
    success: function (data) {
        $('#someid').html(data);
    },
    error: function (jqXHR, textStatus, errorThrown) {
        // TODO - Implement if an error occurs.
    }
});

现代浏览器将实现 stringify 方法。否则,使用 Nuget 引入 JSON2,如果您需要支持旧版浏览器,它将提供 stringify 方法。

此外,作为第三次健全性检查,请查看您的数据。很多时候,JSON 数据的结构与模型数据之间存在不匹配。

于 2013-07-20T00:38:52.753 回答