2016-03-31 6 views
0

AJAXでフォームをPOSTしようとしましたが、パラメータの1つが連想配列です。 コンソールで、要求が正常でパラメータが正しく送信されていることを確認できます。AJAXでコントローラのアクションに送信されたデータ(連想配列)を取得します。

これは、AJAX呼び出し

var fieldsEdited = [{"Key":1,"Values":["value1"]},{"Key":2,"Values":["value2"]}, ...] 
$.ajax({ 
    url: "/url" 
    type: 'POST', 
    data: { fieldsEdited: JSON.stringify(fieldsEdited) }, 
    dataType: 'json', 
    traditional: true, 
    success: function (data, textStatus, jqXHR) { } 
}); 

である。しかし、私はその

[HttpPost] 
public ActionResult Method(List<DictionaryInfos> fieldsEdited) 
のようにそれらを取得しようとしているコントローラ

のアクションでこれらのパラメータを「マップ」することはできません

[Serializable] 
public class DictionaryInfos 
{ 
    public int Key { get; set; } 
    public List<String> Values { get; set; } 
} 

しかし、結果は常に空の配列です、私は正しいデータを取得することはできません。

どうしたのですか?

+0

このパラメータの前に[FromBody]属性を追加してください。 – MajkeloDev

+0

完全なAjaxコールコードを投稿してください。 –

+0

投稿を編集しました。ありがとう – user3656665

答えて

1

コードに少なくとも1つの問題があります。dataTypeは、サーバーに送信するもののタイプではなく、サーバーから戻ってくるものがあります。

あなたは、サーバーは、あなたがそれに送っているデータの種類を知っているようにcontentTypeを指定する必要があります。

contentType: "application/json; charset=utf-8" 

ほかに、それはあなたが

data: { fieldsEdited: JSON.stringify(fieldsEdited) }, 

を変更する必要がある可能性があります

data: JSON.stringify(fieldsEdited), 

またはさらには

data: fieldsEdited 
+0

実際、contentTypeを追加するだけでそれが解決されます。ありがとう – user3656665

関連する問題