从jquery到mvc发布复杂类型

时间:2013-04-14 10:07:11

标签: jquery asp.net-mvc-4 model-binding

我的复杂类型如下:

    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,但对象始终为空值。

请告知并感谢您的时间。

1 个答案:

答案 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; }
}

我拿了你的代码,做了那些更新,然后一切正常!