2017-04-19 16 views
0

私はMVCコントローラに投稿したいいくつかの無関係の文字列とカスタムオブジェクトの配列を持っていますが、私はそれらを正しく取得できないようですコントローラ。ここでAjaxを使用してMVCコントローラにカスタムオブジェクトを投稿する

は私のAjaxのリクエストです:

var objects = new Array(); 

objects.push({ 
item1: "1", 
item2: "2", 
item3: "3" 
}); 

$.ajax({ 
    url: '/Account/Post', 
    data: { 
     objects: JSON.stringify({objects: objects}), 
     username: $("#username").val() 
    }, 
    type: 'POST', 
    success: function() { 
    }, 
    error: function() { 
    } 
}); 

そして、ここでは私のコントローラである:ここでは

[HttpPost] 
    public ActionResult Post(Objects[] objects, string username) 
    { 
     return null; 
    } 

は私のオブジェクトのクラスである:私はここで間違って

public class Objects 
{ 
    public string Item1 { get; set; } 

    public string Item2 { get; set; } 

    public string Item3 { get; set; } 

    public string Item4 { get; set; } 
} 

何をしているのですか?

+0

エラーがありますか?コントローラが呼び出されていますか?どんなjavascriptデバッガからでもHTTPリクエストを見たことがありますか? – Steve

+0

コントローラが呼び出されましたが、オブジェクト配列がnullです – Jannik

+0

オブジェクトクラスはどのように見えますか? – Steve

答えて

0

JSON.stringifyを削除すると、何か不明な理由で私の問題が解決されました!

+0

最初に気付かなかったのですが、あなたのajaxの中の "object:JSON.stringify({objects:objects}")という行は、実際には "objects:JSON.stringify(objects)"です。 – Steve

+1

理由は、サーバーが文字列ではなく実際のオブジェクトを必要としているからです。 $ .ajaxは送信のためにフードの下でそれを連載します。文字列を(stringifyを介して)渡すと、それは1つの文字列変数としてシリアライズされます。それをオブジェクトに渡すと、適切にシリアル化されます。あなたのブラウザの開発ツールのネットワークタブにあるリクエストを見ると、リクエスト本体に含まれている内容の違いがわかります。 – ADyson

関連する問題