Warning: file_get_contents(/data/phpspider/zhask/data//catemap/0/asp.net-mvc/15.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Asp.net mvc MVC4未绑定基本类型列表_Asp.net Mvc_Jquery_Asp.net Web Api_Model Binding - Fatal编程技术网

Asp.net mvc MVC4未绑定基本类型列表

Asp.net mvc MVC4未绑定基本类型列表,asp.net-mvc,jquery,asp.net-web-api,model-binding,Asp.net Mvc,Jquery,Asp.net Web Api,Model Binding,以我的生命来说,我无法绑定这些数据。以下是我的JavaScript: var params = { 'InvItemIDs': ["188475", "188490"]}; $.post("api/Orders/OrderFromInventory?" + $.param(params)) 以及控制器动作: public HttpResponseMessage OrderFromInventory(IList<int> InvItemIDs) { return new Ht

以我的生命来说,我无法绑定这些数据。以下是我的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[0]=188475&InvItemIDs[1]=188490
它们都没有约束力
InvItemIDs
始终为
null
。我做错了什么

编辑:

因此,事实证明,所有这些都是MVC4中新的Web API控制器代码中的一个bug(或其他东西)。当我把完全相同的代码移到标准控制器上时,它就开始工作了


我仍然感兴趣的是,是否有人知道为什么Web API会破坏这个绑定。

它不起作用的原因是因为您正在使用[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
    }              
});
这可能会有所帮助。具体来说,看看他的第一个示例,如果将
IList
更改为
ICollection
,会发生什么情况

像这样的“应该”工作


这是一个好机会。。。不幸的是,在我添加HttpPost(这是我的“到底发生了什么?”过程的一部分)之前,它不起作用,当我删除它时仍然不起作用。如果我保留帖子并将列表作为数据提交,它也不起作用。我想ajax命令不是问题?ie-如果直接输入带有查询字符串的url,它仍然会失败?它将失败,因为它应用了[HttpPost]属性,这意味着它将只接受Post请求。在浏览器上输入url(我想这就是你们所指的)是一个Get请求。我已经通过删除“traditional:true”属性来测试我的post请求,结果就是admanb的结果seen@Jack-admanb提到,
HttpPost
最初不在那里,他只是在试图让它工作时才添加它。我从这个问题(提供了各种查询字符串)中假设,如果它被删除(或更改为
HttpGet
),那么问题仍然存在。直接使用
HttpGet
和带有查询字符串的URL进行测试有助于隔离实际问题所在。不确定最后一次编辑的位置-在查询字符串中添加空格会不会破坏它?如果没有,我想它会将空格转换为%20:)我可以问一下为什么使用整数列表而不是数组吗?或者更好,一个参数int数组?您是否正在尝试检索数据或向控制器发送订单请求?我正在发送一篇文章,以从一组库存项目创建订单。我不知道你说的“params int array”是什么意思。你需要在Ajax帖子中设置“traditional:true”才能让数组工作。我已经更新了我的答案,试试看。显然Web API使用了不同的模型绑定器:。似乎有一些问题:我希望有,但我已经读了十几遍了。我使用了基本表示法和[0]=,[1]=表示法,它们都没有绑定。将IList更改为ICollection也没有效果。将其更改为List也不起作用。请稍候-您的参数是
InvItemID
(复数),而您正在发送
InvItemID
(单数)?天哪,我希望如此。遗憾的是,我只是打错了。我肯定是在发送InvItemIDs。我刚刚创建了一个新的MVC3应用程序(这里没有运行“ahem”XP的MVC4),在
HomeController
中的
About
操作中添加了
IList InvItemIDs
,并通过
http://localhost/Home/About?InvItemIDs=188475&InvItemIDs=188490
。这工作得很好,所以要么是MVC4特性,要么你已经做了一些事情,比如更改路线、默认模型绑定器等等。
var InvItemIDs = ["188475", "188490"];
$.ajax({ type: "POST",
    url: "Home/TestIndex",
    datatype: "json",
    traditional: true,
    data:
    {
        'InvItemIDs': InvItemIDs
    }              
});
[HttpGet]
public HttpResponseMessage OrderFromInventory(IList<int> InvItemIDs)
{
    return new HttpResponseMessage();
}
?InvItemIDs=188475&InvItemIDs=188490