将Razor列表传递给Javascript(JSON)
Im尝试将razor视图中声明的列表传递到javascript变量:将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
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]
属性