使用非顺序索引的JSON数组/对象进行模型绑定

时间:2014-09-11 09:31:48

标签: c# jquery ajax asp.net-mvc json

参考Phil Haack的article,我可以在不使用顺序指示的情况下绑定到视图模型,例如:

public class FooViewModel
{
    public int Id { get; set }

    public decimal Amount { get; set; }

    public ICollection<Bar> Bars { get; set; }
}

public class BarViewModel
{
    public int Id { get; set; }

    public string Baz { get; set; }
}

我的Foo/Edit.cshtml

<input type="hidden" name="Bars.Index" value="123" />
<input type="text" name="Bars[123].Baz" value="Chips" />

<input type="hidden" name="Bars.Index" value="caliente" />
<input type="text" name="Bars[caliente].Baz" value="Salsa" />
通过正常的HTTP Post请求提交表单时,

Bars被正确填充。但是,如果我将表单序列化为JSON,即使用serializeJSON序列化表单然后通过AJAX提交,则JSON有效负载不正确:

{
    "Id": 1,
    "Amount": 26.4,
    "Bars": {
         "123": {
             "Id": 1,
             "Baz": "Chips"
         },
         "caliente": {
             "Id": 2,
             "Baz": "Salsa"
         },
         "Index": "caliente" <-- Extra property in the JSON object
    }
}

无法绑定到Bars中的FooViewModel属性(Bars变为空)。在使用具有非顺序索引的JSON对象时,如何绑定集合属性的任何想法?

1 个答案:

答案 0 :(得分:0)

尝试使用

Dictionary<string, Bar> 
对于你的Bars param,它应该能够理解你正在获得的序列化JSON。