我的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);
}