2

在我的一生中,我无法让这些数据绑定。这是我的 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 为什么会破坏此绑定有任何见解,我仍然很感兴趣。

4

2 回答 2

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
    }              
});
于 2012-12-03T23:27:36.490 回答
1

这篇Haacked 博客文章可能会有所帮助。具体来说,看看他的第一个例子,如果你改为 会发生IList什么ICollection

像这样的“应该”工作

[HttpGet]
public HttpResponseMessage OrderFromInventory(IList<int> InvItemIDs)
{
    return new HttpResponseMessage();
}

使用查询字符串

?InvItemIDs=188475&InvItemIDs=188490
于 2012-12-03T23:56:21.053 回答