我的复杂类型如下:
public class ReviewProcessLevelModel {
public int levelType;
public string user;
public string field;
public string[] dtFieldValues;
public string[] dtUsers;
}
我发布的字符串看起来像(在JSON.stringify函数之后):
[
{"levelType":0,"user":"71","field":null,"dtFieldValues":null,"dtUsers":null},
{"levelType":1,"user":null,"field":"Dummy","dtFieldValues":null,"dtUsers":null}
]
我的控制器看起来像:
[AcceptVerbs(HttpVerbs.Post)]
public ActionResult saveCampaign(IList<ReviewProcessLevelModel> ReviewProcess)
最后,这是我将数据发送到控制器的方式:
$.ajax({
type: "POST",
url: "@Url.Action("saveCampaign", "SaasAccessCertification")",
traditional: true,
contentType: 'application/json',
dataType: 'json',
data: getRPData() // returns the string above
}).done(function (resp) {
debugger;
}).error(function (resp) {
debugger;
});
该列表附带2个ReviewProcessLevelModel,但对象始终为空值。
请告知并感谢您的时间。
答案 0 :(得分:4)
是的,有三个问题。
1 - 您的控制器参数的名称必须与您发布的对象的名称相匹配,因此您的json字符串将变为:
'{"ReviewProcess": [{"levelType": 0,"user": "71","field": null,"dtFieldValues": null,"dtUsers": null},{"levelType": 1,"user": null,"field": "Dummy","dtFieldValues": null,"dtUsers": null}]}'
2 - 您应在contentType
上指定post
作为选项:
contentType: 'application/json',
3 - 这可能听起来很疯狂,但你的财产必须有吸气剂和制定者。
public class ReviewProcessLevelModel
{
public int levelType { get; set; }
public string user { get; set; }
public string field { get; set; }
public string[] dtFieldValues { get; set; }
public string[] dtUsers { get; set; }
}
我拿了你的代码,做了那些更新,然后一切正常!