将 C# 列表转换为 javascript 数组

Posted

技术标签:

【中文标题】将 C# 列表转换为 javascript 数组【英文标题】:Converting C# list to javascript array 【发布时间】:2020-04-30 15:13:38 【问题描述】:

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

我在这里错过了什么?

【问题讨论】:

JavaScript 将通过引用传递对象——而不是在循环外声明arObj,在循环内声明它,或者直接从循环内推入一个对象。 @:arObjArray.push(text: "", value: "") 你应该使用 JSON。 这与您的问题无关,但我之前从未见过@foreach@:arObj 等语法。它来自哪里? @Klaycon ASP.Net MVC Razor(CShtml 文件)。 【参考方案1】:

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

改为在循环内声明并分配arObj

@foreach (SelectListItem d in packageList)

    var arObj = ;
    @:arObj["text"] = "@d.Text";
    @:arObj["value"] = Number("@d.Value");

    @:arObjArray.push(arObj);

【讨论】:

tymeJV 的建议做到了。不确定我从哪个 Internet 帖子中获得了 @foreach, @:arObj。

以上是关于将 C# 列表转换为 javascript 数组的主要内容,如果未能解决你的问题,请参考以下文章

如何将c#中的List转换为javascript中的数组并检查数组项

是否可以将 MVC C# List<int> 转换为 javascript 数组?

如何将 C# List<string[]> 转换为 Javascript 数组?

Javascript:将数组选择到新数组中(如 C# Select)

C# - 将对象列表转换为包含多个对象属性的数组

C#:将字符列表转换为字符串