【发布时间】:2012-12-03 23:11:22
【问题描述】:
我这辈子都无法绑定这些数据。这是我的 JavaScript:
var params = { 'InvItemIDs': ["188475", "188490"]};
$.post("api/Orders/OrderFromInventory?" + $.param(params))
和控制器动作:
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 为何会破坏此绑定有任何见解,我仍然很感兴趣。
【问题讨论】:
-
不确定最后的编辑 - 不会在查询字符串中添加空格会破坏它吗?如果没有,我想它会将空格转换为 %20 :)
-
我能问一下您为什么使用整数列表而不是数组吗?或者更好的是,一个 params int 数组?您是否正在尝试检索数据或向您的控制器发送订单请求?
-
我正在发送一个 POST 以从一组库存项目中创建一个订单。我不确定“params int array”是什么意思。
-
您需要在 Ajax 帖子中设置“traditional: true”才能使数组正常工作。我已经更新了我的答案,试试看。
-
显然 Web API 使用了不同的模型绑定器:stackoverflow.com/a/9910490/1505426。好像有问题:stackoverflow.com/q/9592838/1505426
标签: asp.net-mvc jquery asp.net-web-api model-binding