视图在mvc 3中保持向我的控制器返回null

时间:2012-04-02 10:38:49

标签: jquery asp.net-mvc

我正在尝试从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。我尝试了几种不同的方式,但没有任何帮助。

2 个答案:

答案 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)