6

クライアント側には、「Guid」と「int」のペアを格納する連想配列があります。json を使用して配列をサーバーに渡します。

  $.ajax({
      url: methodUrl,
      type: 'POST',
      async: false,
      data: { values: items },
      dataType: 'json',
      success: function (data) {
          //...
      }
  });

渡そうとするオブジェクトは次のようになります(Chromeデバッガーから取得):

  items: Object
  44f871e0-daee-4e1b-94c3-76d633a87634: 1
  698ce237-3e05-4f80-bb0d-de948c39cd96: 1

コントローラーにはメソッドがあります

  public ActionResult Method(Dictionary<Guid, int> values)
  {

  } 

ただし、プロパティ値は null のままです。クライアント側の Guid のリストとコントローラーのリストだけで、すべて正常に動作します。ディクショナリではなく、コントローラーの値に別のタイプを選択する必要があると思います。また、「traditional: true」を ajax リクエストに追加しようとしましたが、成功しませんでした。

どんなアドバイスでも大歓迎です!

4

3 に答える 3

3

解決策としてディクソンの回答を選択しましたが、最終的には追加のクラスを使用しないようにしました。

最も重要な部分は、サーバーに送信されるコレクションの型が、キーと値の型を持つ JavaScript 配列であることです。たとえば、サーバーに送信する前に js で作成したオブジェクトは次のとおりです。

items : Array[2]
0: Object
key: "ddac666f-310f-4022-a22c-c542355b765e"
value: 1
1: Object
key: "ce9ae5a6-e6a6-4bb6-b61c-b1cc324be049"
value: 1

この後、文字列化してからサーバーに送信する必要があります。

    var obj = JSON.stringify(items);
    $.ajax({
        url: teilnahmen.AddNewTeilnahmenUrl,
        type: 'POST',
        traditional: true,
        dataType: 'json',
        data: obj,
        contentType: "application/json",
        success: function (data) {
            //...
        }
    });

サーバー側:

    public ActionResult AddNewTeilnahmen(Dictionary<Guid, int> values)
    { ... }

おそらく再利用されず、.NET に既に存在するクラスを作成する必要がないため、このソリューションの方が優れていると私は今でも信じています。しかし、ディクソンが正しく述べたように、それは好みの問題です。

于 2013-04-12T12:06:10.937 に答える