将对象传递给web api控制器

时间:2014-03-11 14:59:58

标签: jquery .net asp.net-web-api

使用jQuery和.net web api我没有将单个对象传递给控制器​​的问题。我正在努力的是将多个对象传递给控制器​​。我已经看过一些类似的样本,但他们只讨论单个对象传递,我没有问题。这是jQuery代码:

var data = settings.itemArray;
if (data.length == 0) return;

$.post(sApi.data.Update, JSON.stringify({'data':data}),
function (results) {
    if (results > 0) { }
});

settings.itemArray由4个对象组成。

我的控制器是这样的:

public void Post([FromBody]List<M.DataVal> data)
    {
        var d = data.Count();
    }

后面的代码中的Dataval定义如下

public class DataVal
{
    public int AgencyId { get; set; }
    public int Year { get; set; }
    public int Value { get; set; }
    public int Area { get; set; }
}

如果我将它从列表更改为单个对象但不是多个,则可以正常工作。执行JSON.stringify没有任何区别,也没有在控制器上设置请求方法的类型。我还确保它与Content-Type:application / json的标题一起使用。我可以在chromes开发人员工具中看到Form Data帖子中的数据,因此数据正在通过,其形式为:

{"data":[{"AgencyId":80,"Year":2011,"Value":6546,"Area":1},{"AgencyId":80,"Year":2011,"Value":654654,"Area":2},{"AgencyId":80,"Year":2011,"Value":6456,"Area":3}]}:

任何人都知道如何将多个对象传递给控制器​​或看到我做错了什么?

1 个答案:

答案 0 :(得分:0)

找到答案。当您想要将多个对象作为数组发送时,似乎需要将匿名类型发送到Web api。在http://kwilson.me.uk/blog/post-an-array-of-objects-to-webapi-using-jquery/找到了答案。

所以,jQuery看起来像这样:

$.post(sApi.data.Update, { '': data },
function (results) {
if (results > 0) { }
});

执行此更改会导致我的所有对象都被传递并可用。希望这有助于某人。