2

我正在尝试将 json“集合”发送到 MVC3 控制器。当传入的对象是一个数组之前,我已经相当容易地做到了这一点,但是在这种情况下没有数组(除非嵌套的 {} 是一个'数组'?)

我也尝试了各种模型配置,例如:FormCollectionDictionary<string, FooBar[]>和其他一些,但它始终为空。

我做错了什么导致花哨的 json-binder-thing 不起作用?

谢谢。

构建 JSON 对象

function getJson() {
    var foobars = {};

    foobars["FooBar1"] = { "Foo": "baz1", "Bar": 1 };
    foobars["FooBar2"] = { "Foo": "baz2", "Bar": 2 };
}

getJson() 产生这个 Json 对象

{
    "FooBar1" : 
    {
        "Foo":"baz1", 
        "Bar":1
    },
    "FooBar2" : 
    {
        "Foo":"baz2", 
        "Bar":2
    }
}

楷模

public class FooBarModel
{
    public FooBar[] FooBars { get; set; }
}

public class FooBar
{
    public string Foo { get; set; }
    public int Bar { get; set; }
}

控制器

[HttpPost]
public void ParseFooBars(FooBarModel model)
{
    //model is null
}

jQuery的阿贾克斯

$.ajax({
    url: "MyController/ParseFooBars",
    data: JSON.stringify(getJson()),
    type: "POST",
    dataType: "json",
    //contentType: "application/json; charset=utf-8",
    contentType: "application/json",
    success: function () {

    },
    error: function () {

    }
});
4

2 回答 2

0

您在 json 中有“Bar”,在模型中有“Baz”,是错字吗?
如果不是,这可能是映射失败的原因。

另一个原因是默认模型绑定,它可以与 IEnumerable<> 一起正常工作,但我不确定它是否适用于数组。您可能想为您的 FooBarModel 尝试自定义模型绑定器。

于 2012-12-05T22:49:08.923 回答
0

第一个问题 - 你确定你击中了正确的控制器吗?逐步使用调试器将确认这一点。由于没有注意到这一点,我已经被咬过很多次了。

其次,看起来您正在发送字典而不是数组。在您的 JSON 中,您有一组命名实例,但在您的控制器中,您期望的是一组未命名实例。如果您将 JSON 更改为如下所示,它可以工作吗?:

function getJson() {
    var foobars = [];

    foobars.push({ "Foo": "baz1", "Bar": 1 });
    foobars.push({ "Foo": "baz2", "Bar": 2 });
    return foobars;
}
于 2012-12-05T23:24:25.263 回答