0

javascriptからMVCコントローラーへのajax呼び出しを行い、オブジェクトの配列をコントローラーアクションに渡します。

JS コード :

function Constructor(p1, p2) {
    this.foo = p1;
    this.bar = p2;
}

var Obejct_Array = new Array();

Obejct_Array[Obejct_Array.length] = new Constructor("A", "B");
Obejct_Array[Obejct_Array.length] = new Constructor("C", "D");

$.post("/_Controller/_Action", { ObjectArray : Obejct_Array });

C# コード

public Class Example
{
  public string foo { get; set; }
  public string bar { get; set; }
  public string Prop3 { get; set; }
}

 //Action in Controller
 public void _Action(Example[] ObejctArray)
 {
  //Here the size of ObjectArray is 2 but the properties are all null. Whats the problem ?
 }

JavaScript 配列からの両方のエントリがコントローラーのアクション メソッドに渡されますが、プロパティ値は null を示しています。誰でも問題を教えてもらえますか?

4

2 に答える 2

1

これを行うには、 JSONを使用する必要があります。クラスの実際のコードに応じてConstructor、Javascript 側で次のような結果が得られます。

[{"foo":"A", "bar":"B"}, {"foo":"C", "bar":"D"}]

fooこれは、プロパティとを持つ 2 つのオブジェクトの配列の JSON 表現ですbar

サーバー側では、JSON 構造を実際のオブジェクト構造に戻す必要があります。確かにそのためのライブラリがあります(私はC#の人ではないので、何も知りません)

于 2012-09-01T16:43:26.420 に答える
0

MVC を使用している場合は、配列データをアクション メソッドの配列パラメーターに直接バインドするように渡すことができます。MVC は次のようなデータを期待します。

// in js
var data = {
    // could also put the name of the parameter before each [0/1] index
    "[0].foo": "A",
    "[0].bar": "B",
    "[1].foo": "C",
    "[1].bar": "D"
};

// a js function to put the data in this format:
function (array, prefix) {
    var prefixToUse = prefix || "",
        data = {},
        i, key;
    for (i = 0; i < array.length; i++) {
        for (key in array[i]) {
            // might want to do some filtering here depending on what properties your objects have
            data[prefixToUse + "[" + i + "]." + key] = array[i][key];
        }
    }

    return data;
}
于 2012-09-01T18:24:49.213 に答える