将Razor列表传递给Javascript(JSON)

将Razor列表传递给Javascript(JSON),javascript,asp.net,asp.net-core-mvc,Javascript,Asp.net,Asp.net Core Mvc,Im尝试将razor视图中声明的列表传递到javascript变量: List<testObj> mylist= new List<testObj>(); <div class="listboxFilterItem" onclick=' setList(@(Html.Raw(Json.Serialize(mylist))))'> <div style="padding-top:2px; float: left;">Test</d

Im尝试将razor视图中声明的列表传递到javascript变量:

  List<testObj> mylist= new List<testObj>();

    <div class="listboxFilterItem" onclick=' setList(@(Html.Raw(Json.Serialize(mylist))))'> <div style="padding-top:2px; float: left;">Test</div>     <div class="listboxChosenFilter">*</div>   </div>
List mylist=new List();
测试*
我的javascript代码如下所示:

function setList(list) {
    var jsonObj = JSON.parse(list);
    console.log(jsonObj);

  }


</script>
函数集合列表(列表){
var jsonObj=JSON.parse(列表);
console.log(jsonObj);
}

但是我得到了非法的令牌异常,因为我的引号-->“data”我不确定您使用的是哪个MVC/.NET版本,但是您是否尝试过使用
JavaScriptSerializer
而不是Json

@{
    var myList = new List<testObj>();
    var list = new JavaScriptSerializer().Serialize(myList);
    // list now contains a JSON string repesentation of myList.
}

<script>
   var options = @Html.Raw(list);
</script>
@{
var myList=新列表();
var list=new JavaScriptSerializer().Serialize(myList);
//列表现在包含一个重复myList的JSON字符串。
}
var options=@Html.Raw(列表);

options javascript变量应该包含myList C#变量中的任何项的数组

尝试替换onclick代码

更换

 onclick=' setList(@(Html.Raw(Json.Serialize(mylist))))'
onclick='setList(@Html.Raw(Json.Encode(mylist)))'

 onclick=' setList(@(Html.Raw(Json.Serialize(mylist))))'
onclick='setList(@Html.Raw(Json.Encode(mylist)))'

我有一个带有属性
ICollection
的模型的强类型HTML视图。我正在寻找如何将列表/列表/对象列表传递到JavaScript中,出于安全原因,我在某些地方看到了“不要使用
@Html.Raw()

.NET Core 3.1中对我有效的是只使用
System.Text.Json
命名空间的
@Json.Serialize()
。所以在我的例子中,我使用它作为JavaScript变量值:

var myModelOptionsList = @Json.Serialize(Model.Options);
现在我有了一个JavaScript对象列表

注意:项目使用了EntityFramework Core来存储模型(及其选项)。每个选项对象都有一个返回到父模型的引用导航属性。这导致序列化过程中出现错误。最简单的解决方案是在序列化期间不包括这些引用,在选项对象的模型引用导航属性上使用
[JsonIgnore]
属性