我的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传递,因此无法为添加或更新为该地址输入的值。我在这里错过了什么?
答案 0 :(得分:0)
您已使用AddressLine1
属性自行显示display
变量。创建新记录时,AddressLine1
将是表单正文中的另一个参数,如ID
属性。您可以通过Chrome中的开发人员工具检查请求正文。
您可以尝试使用createAction为jQuery.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();
}
});
});
}