2012-04-02 5 views
0

ViewからControllerにデータを送信しようとしています。私は非常に複雑なオブジェクトを持っています。オブジェクトには、1つの配列と1つの値を持つオブジェクトが含まれています。何をしようと、私のコントローラではnullです。私はIE9s F12でデータを検査し、データはそこにあります。私は何が間違っているのか分かりません。Viewはmvcのコントローラにnullを返す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

$.ajax方法は、あなたが送信しているものであるapplication/jsonへのリクエストのContent-Typeヘッダを設定することを可能にする方法を

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

    } 
}); 

注意してください。 $.postメソッドでは、このヘッダーを設定することができず、モデルバインダーは要求を理解できません。

+0

甘い!どうもありがとう! – kaze

0

FormCollectionをコントローラで受信して確認することはできますか。コントローラー内のデータをform["changedInserted"]と読んでください。

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

使用:代わりの

public void SaveGridData(FormCollection form) 
関連する問題