将C列表转换为javascript数组

将C列表转换为javascript数组,javascript,c#,arrays,foreach,Javascript,C#,Arrays,Foreach,我的C控制器方法中有一个SelectList,它包含8个文本/值对。我想把它转换成一个JavaScript数组,我可以在剑道网格的foreignKey列中访问它。我的arObjArray的结构与预期一样正常。唯一的问题是数组的内容是错误的。我得到了一个8行的数组,其中每行的值与packageList中最后一个项目的值相同,而不是与packageList项目一致的8对列表。我的javascript函数的相关部分如下所示: var arObjArray = []; var arObj = {};

我的C控制器方法中有一个SelectList,它包含8个文本/值对。我想把它转换成一个JavaScript数组,我可以在剑道网格的foreignKey列中访问它。我的arObjArray的结构与预期一样正常。唯一的问题是数组的内容是错误的。我得到了一个8行的数组,其中每行的值与packageList中最后一个项目的值相同,而不是与packageList项目一致的8对列表。我的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);
}

JavaScript将通过引用传递对象-而不是在循环外部声明arObj,而是在循环内部声明它,或者直接从循环内部推送对象。@@arObjArray.push{text:,value:}您应该使用JSON。这与您的问题无关,但我以前从未见过@foreach、@:arObj等语法。它来自哪里?@Klaycon ASP.Net MVC Razor CSHTML文件。tymeJV的建议做到了这一点。不知道我从哪一个网上发的@foreach@:arObj。