3

我有一个复杂的类型,看起来像:

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

请告知并感谢您的时间。

4

1 回答 1

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 - 这可能听起来很疯狂,但你的属性必须有 getter 和 setter。

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

我拿走了您的代码,进行了这些更新,然后一切正常!

于 2013-04-14T13:39:04.923 回答