不能 POST 字符串数组到 ASP.NET MVC3
Can't POST an array of string to ASP.NET MVC3
我有一个 MVC3 控制器操作:
public ActionResult DoStuff(DoStuffModel model)
DoStuffModel
看起来像这样:
public class DoStuffModel
{
public long SomeId { get; set; }
public List<string> Codes { get; set; }
}
在我的 jQuery 中,我这样做:
var postData = {
SomeId: 1,
Codes: ["code1", "code2", "code3"]
};
$.post(url, postData, function (data) {});
URL 是正确的。 postData
在我登录时看起来像这样:
SomeId
已正确绑定,但 Codes
仍为空。怎么回事?
您需要使用 $.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) {
....
}
});
我有一个 MVC3 控制器操作:
public ActionResult DoStuff(DoStuffModel model)
DoStuffModel
看起来像这样:
public class DoStuffModel
{
public long SomeId { get; set; }
public List<string> Codes { get; set; }
}
在我的 jQuery 中,我这样做:
var postData = {
SomeId: 1,
Codes: ["code1", "code2", "code3"]
};
$.post(url, postData, function (data) {});
URL 是正确的。 postData
在我登录时看起来像这样:
SomeId
已正确绑定,但 Codes
仍为空。怎么回事?
您需要使用 $.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) {
....
}
});