asp.net 将Razor List传递给Javascript(JSON)

tuwxkamq  于 2023-05-19  发布在  .NET
关注(0)|答案(4)|浏览(203)

我特灵通过剃刀视图声明列表到一个javascript var:

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>

我的JavaScript代码看起来像这样:

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

  }

</script>

但是我得到了ILLEGAL token异常,因为我的引号-->“data”<--。
你如何将剃刀视图声明的列表传递给JavaScript函数?

hgc7kmma

hgc7kmma1#

尝试替换onclick代码。

替换

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

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

tvokkenx2#

我不确定你使用的是哪个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>

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

1zmg4dgp

1zmg4dgp3#

我有一个模型的强类型Razor cshtml视图,属性为ICollection<Options>。我正在寻找如何将列表/列表列表/对象列表传递到JavaScript中,并在某些地方看到“出于安全原因,不要使用@Html.Raw()”。
在**.NET Core 3.1**中对我有用的是只使用System.Text.Json命名空间的@Json.Serialize()。所以在我的例子中,我将它用作JavaScript变量值:

var myModelOptionsList = @Json.Serialize(Model.Options);

现在我有了一个JavaScript对象列表。

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

nwwlzxa7

nwwlzxa74#

对我很有效

onclick="setList('@Json.Serialize(mylist).ToString()'))"

相关问题