ASP.NET MVC Core中如何通过JavaScript访问ViewModel整数列表?
问题分析与解决方法
错误原因
你直接在Razor视图中输出@Model.SelectedIds时,Razor引擎会调用该List对象的ToString()方法,而.NET中List<T>的默认ToString()返回的是类型的完整名称,也就是你看到的System.Collections.Generic.List1[System.Nullable1[System.Int32]]。这不是有效的JavaScript语法,自然会导致控制台报错。
正确解决方案
需要将.NET集合对象序列化为JavaScript可识别的JSON格式数组,以下是两种常用实现方式:
方式1:使用ASP.NET Core内置的Json.Serialize
@model Project.ViewModels.Test.MyViewModel $(function() { var test = @Json.Serialize(Model.SelectedIds); });
该方法会直接将List序列化为合法的JS数组,比如列表包含1、null、3时,生成的代码为var test = [1,null,3];,可被JS直接识别。
方式2:使用Newtonsoft.Json(Json.NET)
如果你的项目依赖Newtonsoft.Json,可使用JsonConvert.SerializeObject,注意需要配合Html.Raw避免HTML编码:
@using Newtonsoft.Json @model Project.ViewModels.Test.MyViewModel $(function() { var test = @Html.Raw(JsonConvert.SerializeObject(Model.SelectedIds)); });
内容的提问来源于stack exchange,提问作者Demian
相关产品推荐
相关产品推荐

