将JSON对象和对象列表传递给ASP.Net控制器

时间:2015-12-02 17:45:22

标签: c# asp.net json ajax asp.net-mvc-4

我需要一些帮助。我有这两个模型和我将在下面使用它们的方法。

public class RoleModel
{
    public string Name { get; set; }
    public string Description { get; set; }
    public List<PermissionGroupModel> PermissionGroups { get; set; }
}

public class PermissionGroupModel
{
    public int PermissionGroupID { get; set; }
    public string Name { get; set; }
    public string Description { get; set; }
}

 [HttpPost]
 public bool CreateRole(RoleModel r){
  //code goes here
}

我试图通过AJAX将数据发布到CreateRole()方法,并使用调试中断检查'r'参数以查看模型是否已填充。这是我用来测试它的AJAX调用。

$.ajax({
        type: "POST",
        url: "/BackOffice/CreateRole",
        data:  {"Name": "Test Name", "Description": "Test Desc", "PermissionGroups": ["Name": "Group Name", "Description": "Test Desc"]},
        success: function (data) {},
        complete: function (data) {}
      });

发出请求后,我在visual studio中检查参数。将填充RoleModel名称和描述密钥,并且PermissionGroups Count为1,但不会填充PermissionGroups中的密钥。

任何人都可以建议我可以传递带有对象列表的JSON对象。

提前致谢。

1 个答案:

答案 0 :(得分:1)

您发送的javascript对象不合适。

 "PermissionGroups": ["Name": "Group Name", "Description": "Test Desc"]

在您的viewmodel中,PermissionGroupsPermissionGroupModel个项目的集合。但你不是这样传递的。上面的代码发送4个字符串项作为PermissionGroups属性的值。您需要使用{}

来整理集合中的每个项目

此外,要在复杂对象上进行模型绑定,您需要使用JSON.stringify方法将javascript对象转换为json字符串,并在进行ajax调用时指定contentType属性。 contentType属性值应为"application/json"

contentType属性告诉服务器我们发送的数据是Json格式。

 var d = {
            "Name": "Test Name", "Description": "Test Desc",
            "PermissionGroups": [{ "Name": "Group Name", "Description": "Test Desc" }]
         };

 $.ajax({
            type: "POST",
            url: "/BackOffice/CreateRole",
            contentType: "application/json",
            data: JSON.stringify(d) ,
            success: function (data) {  console.log(data); },
            complete: function (data) {}
       });

另外,最好使用Url.Action帮助器方法来构建动作方法的URL。

所以用url: "/BackOffice/CreateRole"

替换url: "@Url.Action("CreateRole","BackOffice")"