Jquery Can';t将字符串数组发布到ASP.NET MVC3

Jquery Can';t将字符串数组发布到ASP.NET MVC3,jquery,asp.net,asp.net-mvc,asp.net-mvc-3,Jquery,Asp.net,Asp.net Mvc,Asp.net Mvc 3,我有一个MVC3控制器动作: public ActionResult DoStuff(DoStuffModel model) DoStuffModel如下所示: public class DoStuffModel { public long SomeId { get; set; } public List<string> Codes { get; set; } } URL是正确的。当我记录时,postData看起来像这样: SomeId被正确绑定,但code保持

我有一个MVC3控制器动作:

public ActionResult DoStuff(DoStuffModel model)
DoStuffModel
如下所示:

public class DoStuffModel
{
    public long SomeId { get; set; }
    public List<string> Codes { get; set; }
}
URL是正确的。当我记录时,
postData
看起来像这样:


SomeId
被正确绑定,但
code
保持为空。发生了什么事?

您需要使用
$.ajax()
方法,设置正确的ajax选项并对数据进行字符串化

$.post()
方法将数据作为
application/x-www-form-urlencoded发送;charset=UTF-8
,这意味着您需要使用索引器生成集合,以便
DefaultModelBinder
绑定它-例如

var postData = { SomeId: 1, 'Codes[0]': 'code1', 'Codes[1]': 'code2', 'Codes[2]': 'code3'};
使用包含数组的当前对象的代码将是

$.ajax({
    url: url,
    type: 'post',
    contentType: 'application/json',
    data: JSON.stringify({ model: postData })
    success: function(data) {
        ....
    }
});

您的模型需要一个名为Codes的数组,但在您的开发工具中,它显示javascript对象中的数组名为PiCodes。你能检查一下这是否有帮助吗?只是猜测一下,但是你试过
publicstring[]Codes{get;set;}
我的截图不好,对不起。名称对应。请设置应用程序内容type=“application/json”谢谢您的帮助!但是,
[0]。代码
的语法似乎不正确。我的Intellisense似乎至少对此有所抱怨。抱歉,忘记了引号(注意,在本例中,您也可以使用
'code[0]”
(简单对象的集合),因为您发送的是JSON,所以不需要使用
code[0]
。OPs原始的
postData
是正确的,他只是缺少了
application/json
头。@DarinDimitrov,我知道-我正在解释如何在不设置
contentType
选项的情况下生成数据:)谢谢。然而,你的两个选择似乎都不起作用。即使是
SomeId
也不会这样绑定。
$.ajax({
    url: url,
    type: 'post',
    contentType: 'application/json',
    data: JSON.stringify({ model: postData })
    success: function(data) {
        ....
    }
});