2017-04-08 79 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, 
    .... 
};