Jquery Can';t将字符串数组发布到ASP.NET MVC3
我有一个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保持
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) {
....
}
});