如何在打字稿中解析C#通用集合列表

时间:2019-01-02 05:02:10

标签: c# typescript razor generic-collections

这是我的.cshtml代码,

  @ { var myList = (List<MyViewModel>)ViewBag.MyCollection; }
    <input id="myListHidden" type="hidden" data-my-list="@myList" />

这是我的打字稿代码,用于获取上面的值,

     let _myList = $('#myListHidden').data('my-list');  

这是返回值,

      "System.Collections.Generic.List`1[MyProject.Data.ViewModels.MyViewModel]"

我只想遍历此集合。这就是我尝试过的

     for (let entry of _myList ) {
         console.log(entry);
       }

但是它以字符串形式System.Collections.Generic.List给出输出。
我想迭代此集合中的所有值。

修改

MyViewModel的属性如下,

    public long Id { get; set; }
    public string Name { get; set; }
    public bool Active { get; set; }

1 个答案:

答案 0 :(得分:2)

您将需要序列化集合,然后将该序列化的值输出为“ Raw”(否则剃刀引擎将转义您的JSON,而您不希望这样做)

@using Newtonsoft.Json;

@{
   var myList = JsonConvert.SerializeObject(ViewBag.MyColection);
}

<input id="myListHidden" type="hidden" data-my-list="@Html.Raw(myList)" />

在此示例中,我使用Newtonsoft序列化程序。您可以通过安装NuGet软件包来使用它。

以上内容将生成如下内容:

<input id="myListHidden" type="text" data-my-list="[{"Id":1,"Name":"Bob","Active":true}]" />

然后您可以按需要使用该值

编辑:

请注意,如果您不使用@Html.Raw(),剃须刀引擎将输出以下内容:

<input id="myListHidden" type="text" data-my-list="[{&quot;Id&quot;:1,&quot;Name&quot;:&quot;Bob&quot;,&quot;Active&quot;:true}]" />