【问题标题】:Converting C# list to javascript array将 C# 列表转换为 javascript 数组
【发布时间】: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 文件)。

标签: javascript c# arrays foreach


【解决方案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。
猜你喜欢
  • 2014-07-13
  • 2018-01-21
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2011-09-23
  • 2014-01-29
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多