Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/jquery/72.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
Jquery 使用IEnumerable对AJAX请求进行MVC绑定<;字符串>;_Jquery_Asp.net Mvc_Json_Model Binding - Fatal编程技术网

Jquery 使用IEnumerable对AJAX请求进行MVC绑定<;字符串>;

Jquery 使用IEnumerable对AJAX请求进行MVC绑定<;字符串>;,jquery,asp.net-mvc,json,model-binding,Jquery,Asp.net Mvc,Json,Model Binding,这是我现在面临的情况。我的MVC控制器中有一个操作,如下所示: [HttpPost] public JsonResult MyAction(int id, IEnumerable<string> strings, bool trueFalse, string anotherString, bool anotherTrueFalse) {} $.ajax({ type: 'POST', dataType: 'json', contentType: 'application/json;

这是我现在面临的情况。我的MVC控制器中有一个操作,如下所示:

[HttpPost]
public JsonResult MyAction(int id, IEnumerable<string> strings, bool trueFalse, string anotherString, bool anotherTrueFalse) {}
$.ajax({
type: 'POST',
dataType: 'json',
contentType: 'application/json; charset=utf-8',
data: {"id":12345,"strings":["onestring"],"trueFalse":false,"anotherString":"Woo String","anotherTrueFalse":false},
//Success/Error handlers here
});
现在,我看到的问题是:无论发送的数据是什么,
id
trueFalse
anotherString
anotherTrueFalse
都在调试控制器动作并检查绑定到动作的参数时被正确绑定

问题在于
strings
:如果我发送一个带有单个字符串的JSON数组(如上所述),它在我的操作中永远不会绑定到
IEnumerable
。如果我发送这样的邮件:

“字符串”:[“一串”、“两串”]

然后将其正确绑定为带有两个条目的
IEnumerable

这里发生了什么,我错过了什么

注意:我只是想先让映射工作起来,所以它仍然有点混乱。我将通过将所有五个属性放入一个视图模型来清理这个问题,这样我只有一个对象被绑定在这里——这可能会完全解决这个问题。但是,我仍然感到好奇的是,当JSON数组只有一个条目时,这不起作用

附录1:在我上面的AJAX中,这基本上就是请求中发送给服务器的内容,但我实际上是在构建该对象,然后将其传递给JSON.stringify——只是试图使问题陈述尽可能简单。您看到的是浏览器发送给控制器操作的内容


附录2:将所有这些属性放在它们自己的视图模型中已经清理了一些东西,但绑定问题仍然存在。此外,从
IEnumerable
切换到
string[]
也会出现同样的问题,因此我基本上没有了解MVC如何为我们执行模型绑定。

问题是,当您收到一个包含一个元素的json数组时,它将被转换为普通的
string
。将多个元素正确转换为
IEnumerable
。在JSON中,单个元素被视为字典而不是数组。我建议使用JSON.NET为您处理解析,因为默认的模型绑定器会给这个带来麻烦


更多信息可以在这里找到:

问题是当您收到一个包含一个元素的json数组时,它将被转换为纯
字符串。将多个元素正确转换为
IEnumerable
。在JSON中,单个元素被视为字典而不是数组。我建议使用JSON.NET为您处理解析,因为默认的模型绑定器会给这个带来麻烦


更多信息可以在这里找到:

我的答案对您有帮助吗?有帮助,谢谢。我会投你一票,现在就把你的答案记下来,除非有其他不太复杂的解决办法。我的答案对你有帮助吗?是的,谢谢。我会给你一票,现在把你的答案记下来,除非有其他不太复杂的解决办法。