ODataController将json转换为数组

时间:2016-02-01 09:36:41

标签: javascript c# ajax asp.net-mvc odata

这是继续之前的一个问题

我有一个OData控制器,其Action为:

var eventsToUpdate = [];
for(i=0;i<5;i++)
{
  //Build the data
  var updatedT = {
   "Id" : (Id)?Id:0,
   "Desc" : CalculatedDesc
   }
   eventsToUpdate.push(updatedT);
}

Url = "Api/Odata/PostUpdate"

$.ajax({
url :Url,
type:"POST",
data:eventsToUpdate ,
dataType : 'json',
success : function(result) {

}
});

这就是我通过ajax调用调用控制器的方式:

var eventsToUpdate = JSON.stringify(eventsToUpdate);

问题是将数组转换为json后,控制器的操作中无法获得数据。这就是我所做的

var updatedT = {
   "Id" : (Id)?Id:0,
   "Desc" : CalculatedDesc
   }

但如果我只是传递

in-scope-prefixes

我获得了相同的数据。解决方案是什么?

1 个答案:

答案 0 :(得分:1)

在我看来,您[HttpPost]期待一个名为eventsToUpdate的密钥,但它在发布的请求中找不到,因为它不存在,因为:

data:eventsToUpdate , // which is eq to = data:[{},{}...], 

最好发送像:

这样的对象
data:{eventsToUpdate:eventsToUpdate} ,
//----^^^^^^^^^^^^^^---------this key will be captured at backend
contentType:'application/json', //<------you would need to add this

另一个建议是在需要时使用traditional:true,

另外,async Task<string>如果返回类型是字符串,那么你也需要更改ajax的dataType,或者你应该从WebMethod返回json。