2017-04-08 77 views
0

我有一个ViewModel像这样:如何绑定数组嵌套场与jQuery在ASp.NET MVC

public class SaveWorkOrderViewModel 
{ 
    public Guid WorkOrderId { get; set; } 
    public List<SaveWorkOrderDelayReasonViewModel> DelayReasons { get; set; } 
} 
public class SaveWorkOrderDelayReasonViewModel 
{ 
    public Guid DelayReasonId { get; set; } 
    public string Title { get; set; } 
} 

,我有controller是得到SaveWorkOrderViewModel作为PARAM像这样:

[HttpPost] 
public virtual JsonResult Save(SaveWorkOrderViewModel saveWorkOrderViewModel) 
{ 
    .... 
} 

bind这个数据我试过像这样:

var workOrderId = $(this).data('workOrderId'); // return guid 
var DelayReasons = $("#drpdelay").select2("val"); // return array of guid 
var saveWorkOrderViewModel = { 
    workOrderId: workorderId, 
    DelayReasons: { 
     DelayReasonId:DelayReasons 
    } 
}; 

但是当Post Page时,我得到nullDelayReasons

我找不到任何类似的帖子来解决这个问题。

更新:

我为发送Ajax调用脚本是:

$.ajax({ 
    url: '@Url.Action(MVC.Admin.WorkOrder.Save())', 
    data: { saveWorkOrderViewModel }, 
    type: "POST", 
    success: function (data) { 
     showMessage(data.message, data.notificationType); 
     if (data.result) { 
      RefreshKendoGrid('woGrid'); 
     } 
    }, 
    error: function (response) { } 
}); 

最后我改变scrips喜欢这一点,并以其优良的工作:

var fields = []; 
$(delays).each(function (index, value) { 
    var obj = {}; 
    obj["DelayReasonId"] = value; 
    obj["Title"] = null; 
    fields.push(obj); 
}); 

var saveWorkOrderViewModel = { 
    workOrderId: workorderId, 
    DelayReasons: fields 
}; 
+0

你使用ajax提交这个吗?如果是这样,请显示脚本的代码。 'SaveWorkOrderDelayReasonViewModel'包含一个属性'Title'。你没有提交? –

+0

是的我使用ajax。不,我不填写“标题”字段。 –

+0

显示你的代码:) –

回答

1

您需要设置contentType使用json的选项,并将您的数据串联起来

.... 
var saveWorkOrderViewModel = { 
    workOrderId: workorderId, 
    DelayReasons: fields 
}; 

$.ajax({ 
    url: '@Url.Action(MVC.Admin.WorkOrder.Save())', 
    data: JSON.stringify(saveWorkOrderViewModel), 
    type: 'POST', 
    contentType: 'application/json; charset=UTF-8', 
    success: function (data) { 
     .... 

另外,使用它使用默认application/x-www-form-urlencoded; charset=UTF-8contentType您当前的ajax选项,您将需要生成名称/值对与索引的集合,例如(其中xxxx是你Guid值)

var saveWorkOrderViewModel = { 
    workOrderId: workorderId, 
    DelayReasons[0].DelayReasonId: xxxx, 
    DelayReasons[1].DelayReasonId: xxxx, 
    .... 
};