9

次の問題があります。

ボタンクリックで、サーバーにデータを POST します。私のコントローラーのアクションは次のようになります。

public ActionResult Accept(List<MyViewModel> entries)
{
    //here entries HAS 2 MyViewModel-Instances in it.
    //The entries are not null, but the values of the instances are!
    //entries[0].ParamA is null
}

MyViewModel は次のようになります。

public class MyViewModel
{
    public string ParamA { get; set; }
    public string ParamB { get; set; }
}

AJAX-Call は次のとおりです。

var myEntries = { entries: [{ ParamA: "A", ParamB: "B" }, { ParamA: "C", ParamB: "D" }] };

$.ajax({
    type: 'POST',
    url: url,
    cache: false,
    data: myEntries,
    dataType: 'text' });

私がすでにやろうとしたこと:

  • dataType を「json」に変更しました
  • 使用: 伝統的: 真
  • var myEntries = JSON.stringify(...); を試しました
  • var myEntries = { エントリ : [JSON.stringify({ ... }), JSON.stringify({ ... })] }; を試しました。
  • 上記と同じですが、jQuery.param(..., true); を使用します。
  • リストの代わりに IEnumerable または MyViewModel[] を使用します。
  • 上記の任意の組み合わせ

ここで何が間違っていますか?

私を助けてくれてありがとう!

編集

私の (Razor)View は、何の関係もないので、現時点では興味深いものではありません。myEntries-Variable を埋めるために HTML.TextBoxFor (または類似の) メソッドを使用していません。実際には動的に満たされます(多くの条件があるため)。質問(および私自身のテスト)のために、変数をハードコーディングしました。:)

4

3 に答える 3

13

あなたの答えとJSON.stringifyメソッドの使用により、それは私にとってうまくいきます

var myEntries = { entries: [{ ParamA: "A", ParamB: "B" }, 
                            { ParamA: "C", ParamB: "D" }] };

$.ajax({
        type: 'POST',
        url: '/{controller}/{action}',
        cache: false,
        data: JSON.stringify(myEntries),
        dataType: 'json', 
        contentType: 'application/json; charset=utf-8'
    });
于 2012-04-12T07:35:09.140 に答える
5

答えが出ました!

jQuery は時々混乱することがあります。

dataType は、サーバーから取得するものを指定するパラメーターです。contentType は、サーバーに送信するものを指定するパラメータです。

したがって、上記の例から、次を追加すると機能します。

contentType: 'アプリケーション/json; charset=utf-8',

AJAX 呼び出しで。

于 2012-04-12T06:55:03.153 に答える