2014-09-30 23 views
0

我有一個jQuery jTable在我的MVC應用程序中綁定到一個對象的列表,其中一個屬性是嵌套對象。我能夠正確顯示所有的值,但是當嘗試執行添加或更新時,嵌套對象會以空值到達服務器。當使用嵌套的JSON對象時添加和編輯jQuery jTable問題

例如,考慮以下示例代碼:

基地對象:

public class User 
{ 
    public int ID { get; set; } 
    public Address Address { get; set; } 
} 

嵌套地址對象:

public class Address 
{ 
    public string AddressLine1 { get; set; } 
    public string AddressLine2 { get; set; } 
    public string City { get; set; } 
    public string State { get; set; } 
    public string Zip { get; set; } 
} 

局部JTable的定義:

$('#UserList').jtable({ 
     title: "Users", 
     actions: { 
      listAction: '/Admin/LoadUsers', 
      createAction: '/Admin/CreateUser', 
      updateAction: '/Admin/UpdateUser', 
      deleteAction: '/Admin/DeleteUser' 
     }, 
     fields: { 
      ID: { 
       key: true, 
       list: false 
      }, 
      AddressLine1: { 
       title: 'Group', 
       display: function(data){ 
        return data.record.Address.AddressLine1; 
       }, 
      } 
     } 
    }); 

控制器更新操作:

public JsonResult UpdateUser(User user) 
{ 
    try 
    { 
     // Code to update user here... 
     return Json(new { Result = "OK" }); 
    } 
    catch (Exception ex) 
    { 
     return Json(new { Result = "ERROR", Message = ex.Message }); 
    } 

}

在JTable中AddressLine1將顯示就好了。但是,當「添加」或「更新」控制器操作運行時,User.Address對象將作爲空值傳遞,因此無法爲地址輸入的值添加或更新。我在這裏錯過了什麼?

回答

0

您已使用display屬性自己顯示AddressLine1變量。當您創建新記錄時,AddressLine1將是表單主體中的另一個參數,如ID屬性。您可以通過chrome從開發者工具中檢查請求主體。

您可以嘗試使用jQuery.DeferredcreateAction屬性指定一個函數,並自行處理髮布請求。

實施例:

createAction: function(postData, jtParams) { 
 
    return $.Deferred(function($dfd) { 
 
    $.ajax({ 
 
     url: '/create/api/url/', 
 
     type: 'POST', 
 
     dataType: 'json', 
 
     data: prepareJSON(postData), // function to convert inputs to your JSON format 
 
     success: function(data) { 
 
     $dfd.resolve({ 
 
      "Result": "OK", 
 
      "Records": data.description, 
 
      "TotalRecordCount": 0 
 
     }); 
 
     }, 
 
     error: function() { 
 
     console.log("ERROR ...."); 
 
     $dfd.reject(); 
 
     } 
 
    }); 
 
    }); 
 
}