2015-12-02 164 views
2

我需要以下帮助。我有这两个模型和我将在以下使用它们的方法。将JSON对象和对象列表传递给ASP.Net控制器

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 
} 

我试图将数据发布到CREATEROLE()通过AJAX方法以及使用调试中断,以检查“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 Name和Description Keys已填充,PermissionGroups Count是1,但PermissionGroups中的密钥未被填充。

任何人都可以提出任何方式,我可以通过一个JSON对象的对象列表中的任何方式。

在此先感谢。

+0

你不发送的PermissionGroups项目PermissionGroupID财产,你怎么能指望它会被填充? – Vi100

回答

0

您发送的JavaScript对象不正确。

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

在您的视图模型,PermissionGroupsPermissionGroupModel项目的集合。但是你没有像这样传递它。以上代码将发送4个字符串项目作为PermissionGroups属性的值。你需要用集合中的每个项目与{}

此外,对于模型绑定复杂对象的情况发生,你需要使用JSON.stringify方法你的JavaScript对象转换为JSON字符串,并指定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")"

+0

谢谢老兄,这工作完美无瑕! –

相关问题