我正在尝试将json“集合”发送到MVC3控制器。在传入的对象是一个数组之前,我已经相当容易地做到了这一点,但在这个例子中没有数组(除非嵌套的{}是'数组'?)。
我也尝试了各种模型配置,例如:FormCollection
,Dictionary<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
$.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 () {
}
});
答案 0 :(得分:0)
你在json中有“Bar”,在模型中有“Baz”,这是一个错字吗? 如果没有,这可能是映射失败的原因。
另一个原因是默认模型绑定,它可以正常使用IEnumerable&lt;&gt;但我不确定它是否适用于数组。您可能想为FooBarModel尝试自定义模型绑定器。
答案 1 :(得分:0)
第一个问题 - 你确定你正在击中正确的控制器吗?单步调试使用调试器将确认这一点。我没有注意到这一点,多次被咬在后面。
其次,看起来你发送的是字典而不是数组。在您的JSON中,您有一组命名实例,但在您的控制器中,您需要一组未命名的实例。如果您将JSON更改为看起来像这样吗?:
function getJson() {
var foobars = [];
foobars.push({ "Foo": "baz1", "Bar": 1 });
foobars.push({ "Foo": "baz2", "Bar": 2 });
return foobars;
}