将 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 数组?