使用嵌套的JSON对象时添加和编辑jQuery jTable问题

时间:2014-09-30 20:02:14

标签: jquery object null nested jquery-jtable

我的MVC应用程序中有一个jQuery jTable,它绑定到一个对象列表,其中一个属性是嵌套对象。我能够正确显示所有值,但在尝试执行添加或更新时,嵌套对象将作为null传递给服务器。

例如,请考虑以下示例代码:

基础对象:

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对象将作为null传递,因此无法为添加或更新为该地址输入的值。我在这里错过了什么?

1 个答案:

答案 0 :(得分:0)

您已使用AddressLine1属性自行显示display变量。创建新记录时,AddressLine1将是表单正文中的另一个参数,如ID属性。您可以通过Chrome中的开发人员工具检查请求正文。

您可以尝试使用createActionjQuery.Deferred属性分配功能,并自行处理发布请求。

示例:

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