对于我的生活,我不能将这些数据绑定。这是我的JavaScript:
var params = { 'InvItemIDs': ["188475", "188490"]};
$.post("api/Orders/OrderFromInventory?" + $.param(params))
和Controller动作:
public HttpResponseMessage OrderFromInventory(IList<int> InvItemIDs)
{
return new HttpResponseMessage();
}
我已经构建了查询字符串,以便它发送:
?InvItemIDs=188475&InvItemIDs=188490
以及
?InvItemIDs[]=188475&InvItemIDs[]=188490
甚至
?InvItemIDs[0]=188475&InvItemIDs[1]=188490
并且它们都没有约束力。 InvItemIDs
始终为null
。我做错了什么?
编辑:
因此,事实证明,这是MVC4中新的Web API控制器代码中的一个错误(或其他东西)。一旦我将完全相同的代码移到标准控制器上,它就开始工作了。
如果有人对Web API为什么会破坏这种绑定有任何见解,我仍然感兴趣。
答案 0 :(得分:2)
它不起作用的原因是因为你正在使用[HttpPost],期望数据在“post body”而不是URL中发布。
你可以
1, remove httpPost
2. put the list in the post content
您需要为数组设置“traditional:true”才能生效。这是我在本地项目上测试过的示例代码,试一试
var InvItemIDs = ["188475", "188490"];
$.ajax({ type: "POST",
url: "Home/TestIndex",
datatype: "json",
traditional: true,
data:
{
'InvItemIDs': InvItemIDs
}
});
答案 1 :(得分:1)
这Haacked blog post可能有所帮助。具体来说,看看他的第一个例子,如果你将IList
更改为ICollection
会怎样?
像这样的“应该”工作
[HttpGet]
public HttpResponseMessage OrderFromInventory(IList<int> InvItemIDs)
{
return new HttpResponseMessage();
}
使用查询字符串
?InvItemIDs=188475&InvItemIDs=188490