这是我现在面临的情况。我的 MVC 控制器中有一个动作,如下所示:
[HttpPost]
public JsonResult MyAction(int id, IEnumerable<string> strings, bool trueFalse, string anotherString, bool anotherTrueFalse) {}
我通过jQuery $.ajax
如下调用访问它:
$.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<string>
我的操作中。如果我发送这样的东西:
"strings":["onestring", "twostring"]
然后它被正确绑定为IEnumerable
具有两个条目的。
这里发生了什么,我错过了什么?
注意:我一直试图让映射首先工作,所以它仍然有点混乱。我将通过将所有五个属性放入视图模型来清理它,因此我在这里只绑定一个对象 - 这可能会完全解决问题。但是,我很好奇,当 JSON 数组只有一个条目时,这不起作用。
附录 1:在我上面的 AJAX 中,这基本上是在请求中发送到服务器的内容,但我实际上是在构建该对象,然后将其传递给 JSON.stringify——只是试图使问题陈述尽可能简单。您看到的是浏览器发送给控制器操作的内容。
附录 2:将所有这些属性放入他们自己的视图模型中已经清理了一些东西,但绑定问题仍然存在。此外,从 切换IEnumerable<string>
到string[]
也表现出相同的问题,因此对于 MVC 如何为我们执行模型绑定,我从根本上缺少一些东西。