2012-04-02 122 views
0

我試圖從視圖發送數據到控制器。我有一個相當複雜的對象,它包含一個數組和一個包含值的對象。無論我嘗試什麼,在我的控制器中都是空的。我已經檢查了IE9的數據F12,數據在那裏。我不明白我做錯了什麼。視圖一直返回null給我的控制器在mvc 3

代碼鑑於:

var deletedIds = []; 

    $("#spara").click(function() { 
     var changedInsertedData = $("#dagbok_grid").getChangedCells('all'); 
     var theData = { changedInserted: changedInsertedData, deleted: deletedIds }; 
     $.post('@Url.Action("SaveGridData")', JSON.stringify({ data: theData }), null, 'json'); 
    }) 

所述控制器:

public void SaveGridData(DagbokGridDTO data) 
    { 
     System.Diagnostics.Debug.WriteLine(data.ToString()); 
    } 

模型/ DTO的

public class DagbokGridRadDTO 
{ 
    public string Kronika { get; set; } 
    public string Region { get; set; } 
    public string id { get; set; } 

} 

public class DagbokGridDTO 
{ 
    public DagbokGridRadDTO[] changedInserted; 
    public string[] deleted; 
} 

的從IE9 F12模式數據

{"data":{"changedInserted":[{"Kronika":"No","Region":"4","id":"2"}],"deleted":["5"]}} 

我認爲它應該以這種方式工作,但在控制器中,data.changedInserted和data.deleted爲null。我嘗試了幾種不同的方式,但沒有任何幫助。

回答

1

相反的:

$.post('@Url.Action("SaveGridData")', JSON.stringify({ data: theData }), null, 'json'); 

使用:

$.ajax({ 
    url: '@Url.Action("SaveGridData")', 
    type: 'POST', 
    contentType: 'application/json', 
    data: JSON.stringify({ data: theData }), 
    success: function(result) { 

    } 
}); 

通知的$.ajax方法是如何允許您設置請求的Content-Type頭application/json這是您要發送的內容。 $.post方法不允許您設置此標題,並且模型聯編程序無法理解您的請求。

+0

甜!非常感謝! – kaze 2012-04-02 10:58:13

0

你可以嘗試在控制器中接收FormCollectiion並檢查。在控制器中讀取數據爲form["changedInserted"]

public void SaveGridData(FormCollection form) 
相關問題