2015-12-02 145 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

謝謝老兄,這工作完美無瑕! –

相關問題