这是继续之前的一个问题
我有一个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
我获得了相同的数据。解决方案是什么?
答案 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。