Json发布的数组有空值

时间:2013-06-06 05:14:50

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

我有以下json对象,对不起图像;

enter image description here

我的jquery代码看起来像这样;

var data = {
    table: table,
    favour: $("[name='radFavour']:checked").val(),
    data: jsonObj
};

$.ajax({
    url: appDomain + "/Compare/Ajax_Update",
    type: "post",
    dataType: "json",
    data: data
});

c#代码看起来像;

[HttpPost]
public void Ajax_Update(CompareFVM fvm)
{
}

FVM包含表和for的字符串,这两个属性的数据都来自。

对于“数据”,我在FVM中有以下内容;

public List<CompareItem> data { get; set; }

项目;

public class CompareItem
{
    public int prodId { get; set; }
    public int stageId { get; set; }
    public string value { get; set; }
    public string property { get; set; }
}

List中包含正确数量的元素,在本例中为2,但每个元素都设置了空值。

因此,我发回的数据不会通过数组元素,但它适用于单个字段。

有什么想法吗?

2 个答案:

答案 0 :(得分:1)

当ajax调用时,将对象名传递为'fvm'(名称应该与C#代码参数匹配)。另外,请使用JSON.stringify(data)检查传递json abject。

    var fvm = {
        table: table,
        favour: $("[name='radFavour']:checked").val(),
        data: jsonObj
    };

    $.ajax({
        url: appDomain + "/Compare/Ajax_Update",
        type: "post",
        dataType: "json",
        data: JSON.stringify(fvm)
    });

答案 1 :(得分:0)

基于我过去做过的类似事情,我会像这样构建你的代码:

// if your C# is
public void Ajax_Update(CompareFVM fvm) {
}

// then your ajax call should be along the lines of
$.ajax({
    data : {
        'data' : [
            { /* compareItem */ },
            { /* compareItem */ },
            // ...
        ]         
    }
})

事实上,你的C#端点期待一个对象,所以你应该给它一个JSON对象。

如果您的C#类是

public class CompareFVM {
    public IList<CompareItem> data { get;set; }
}

然后你的相应JSON应该是:

{ 'data' : [] }

其中.dataCompareItem个对象的数组。

e.g。

{ 
    'data' : [
        {'prodId':'3175','stageId':'19045','value':'TUE','property':'despatchDay'},
        {'prodId':'3175','stageId':'19045','value':'TUE','property':'despatchDay'}
    ]
}