我正在尝试从View向Controller发送数据。我有一个相当复杂的对象,它包含一个数组和一个带有值的对象。无论我尝试什么,它在我的控制器中都是空的。我用IE9s F12 检查了数据,数据就在那里。我不明白我做错了什么。
视野中的代码:
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。我尝试了几种不同的方式,但没有任何帮助。
答案 0 :(得分: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
方法不允许您设置此标头,并且模型活页夹无法理解您的请求。
答案 1 :(得分:0)
您可以尝试在控制器中接收FormCollection并进行检查。在控制器中将数据读作form["changedInserted"]
。
public void SaveGridData(FormCollection form)