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"}]

这是具有属性的 2 个对象数组的 JSON 表示形式foobar.

在服务器端,您必须将 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 回答