我的C#控制器方法中有一个SelectList,其中包含8个文本/值对。我想将其转换为可以在剑道网格的foreignKey列中访问的JavaScript数组。我的arObjArray的结构符合预期。唯一的问题是数组的内容是错误的。我没有包含与packageList项目一致的8对列表,而是获得了8行的数组,每行的值与packageList中的最后一项相同。我的javascript函数的相关部分如下所示:

var arObjArray = [];
var arObj = {};

@foreach (SelectListItem d in packageList)
{
    @:arObj["text"] = "@d.Text";
    @:arObj["value"] = Number("@d.Value");

    @:arObjArray.push(arObj);
}
console.log(arObjArray)


我在这里想念什么?

最佳答案

对象通过引用传递,与C#中的实例相同。在您的foreach循环中,实际上实际上是一遍又一遍地重复使用同一对象,因为它只分配给一个空对象一次(循环外的var arObj = {};)。因此,您要多次将一个对象推入数组,并在每次数组迭代时修改该对象的值。

在循环内声明并分配arObj

@foreach (SelectListItem d in packageList)
{
    var arObj = {};
    @:arObj["text"] = "@d.Text";
    @:arObj["value"] = Number("@d.Value");

    @:arObjArray.push(arObj);
}

10-06 15:18