2017-11-18 9 views
1

I次のセットアップを持ってC#MVC Ajaxの子が一覧表示されます

HTML、それは正しいデータ

クエリ文字列パラメータ

を送るのネットワーク]タブに表示さ

$.ajax({ 
    url: 'Transaction/updateTransaction', 
    data: saveDataObject, 
}).done(function (e) { 
    // done 
}); 

key:2445 
transactionDescription:Description Block 
transactionToType[0][transactionToTypeKey]:1 
transactionToType[0][transactionKey]:2445 
transactionToType[0][transactionValue]:51.25 
transactionToType[0][transactionTypeKey]:10 
transactionToType[1][transactionToTypeKey]:2 
transactionToType[1][transactionKey]:2445 
transactionToType[1][transactionValue]:10.5 
transactionToType[1][transactionTypeKey]:1 

コントローラ

public class TransactionSave 
{ 
    public int key { get; set; } 
    public string transactionDescription { get; set; } 
    public List<TransactionToTypeSave> transactionToType { get; set; } 
} 

public class TransactionToTypeSave 
{ 
    public int transactionKey { get; set; } 
    public int transactionToTypeKey { get; set; } 
    public int transactionTypeKey { get; set; } 
    public decimal transactionValue { get; set; } 
} 

public int updateTransaction(TransactionSave transactionSave) 
{ 
} 

updateTransactionにブレークポイントをやったとき、私は、しかし、transactionSaveは、すべてのデータ(キーと説明)を有し、予想通りtransactionToTypeリストは二つのアイテムを持っているこれらのリスト項目の両方を見ることができ、すべての値は0です。

key:2445 
transactionDescription: Description Block 
transactionToType [ 
    transactionToTypeKey:0 
    transactionKey:0 
    transactionValue:0 
    transactionTypeKey:0 
], [ 
    transactionToTypeKey:0 
    transactionKey:0 
    transactionValue:0 
    transactionTypeKey:0 
] 

ajaxでオブジェクト内のリストを渡すのは間違っていますか?

おかげ

+0

あなたのデータをポストされたデータをマッピングすることができるようになります形式 'transactionToType [0] .transactionToTypeKeyにする必要があります:1 '(プロパティ名の前後に無かっこ)。しかし、コレクションをGETメソッドに送るべきではありません。別に醜いクエリ文字列から、それはクエリ文字列の制限を超えると、例外 –

答えて

1

あなたのAJAX呼び出しがGET要求を行っているので、それが失敗しています。

あなたが$.ajaxメソッドを使用するときに型proeprtyを指定しない場合、それはGET呼び出しを行います。 GET呼び出しの場合、ajax呼び出しを行っているURLにクエリーストリングのキー値項目としてデータが追加されます。

他のタイプの子プロパティを持つ複雑なオブジェクトを送信する場合は、POST要求を行うことを検討する必要があります。クエリ文字列にはブラウザに基づく制限があります。要求がPOSTタイプの場合、データは要求本体に送信されます。

これは動作するはずです。

var saveDataObject = 
{ 
     key: 124, 
     transactionDescription:"My desc", 
     transactionToType: [{ 
           transactionKey: 111, 
           transactionTypeKey: 164, 
           transactionValue:23.34 
          } 
          ] 
}; 

$.ajax({ 
    type:'post', 
    url: '@Url.Action("updateTransaction","Transactions")', 
    contentType:"application/json", 
    data: JSON.stringify(saveDataObject) 
}).done(function(e) { 
    console.log(e); 
}); 

今ではAjaxのリクエストやJSのJSON文字列化バージョンのcontentTypeのよう「アプリケーション/ JSONを」送信しますあなたは[HttpPost]属性

[System.Web.Mvc.HttpPost] 
public ActionResult updateTransaction(TransactionSave transactionSave) 
{ 
    return Json(transactionSave); 
} 

であなたのアクションメソッドをマークしていることを確認しますオブジェクトは要求本体にあります。モデルバインダーは、あなたのオブジェクトにコレクションの

+0

おかげShyjuをスローすることがあります。私はそれを試みましたが、同じ結果を得ているようです。 私のネットワークタブには、リクエストメソッドが今すぐポストされていると伝えられています。データはフォームデータとして渡されていますが、あなたが示唆したすべてのものが完了していますが、値はまだ0です。 コンソールログ内のコード(バックURLを変更し、transactionToTypeの値が同様に0です。 –

+0

あなたは? – Shyju

+0

バージョン4. をMVCのどのバージョンを使用している<アセンブリ= "System.Webのを追加します。 –

関連する問題