2012-04-02 78 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) 
相关问题