Jquery 使用IEnumerable对AJAX请求进行MVC绑定<;字符串>;
这是我现在面临的情况。我的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;
[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为您处理解析,因为默认的模型绑定器会给这个带来麻烦
更多信息可以在这里找到:我的答案对您有帮助吗?有帮助,谢谢。我会投你一票,现在就把你的答案记下来,除非有其他不太复杂的解决办法。我的答案对你有帮助吗?是的,谢谢。我会给你一票,现在把你的答案记下来,除非有其他不太复杂的解决办法。