ASP.NET中如何将控制器返回的MongoDB字符串列表传递给JavaScript
解决Razor视图中无法将后端列表传递给JavaScript的问题
首先,你当前的写法存在几个小问题,同时还有更简洁可靠的方案可以解决这个问题,我来一步步给你梳理:
方法一:用JSON序列化直接传递(最推荐)
这种方式比逐个push要高效得多,还能自动处理字符串中的特殊字符(比如引号),避免JS语法错误:
<script> // 如果ListaNames是包含name属性的实体集合,先提取name字段再序列化 var listNames = @Json.Serialize(Model.ListaNames.Select(item => item.name)); // 如果ListaNames本身就是字符串数组,直接序列化即可 // var listNames = @Json.Serialize(Model.ListaNames); </script>
方法二:修正你的foreach写法
如果你坚持用循环push的方式,需要修正Razor语法的小错误,同时确保Model的属性可访问:
<script> var listNames = []; @foreach(var item in Model.ListaNames) { @:listNames.push("@item.name"); } </script>
这里要注意两个关键点:
- 去掉
@Model.ListaNames里多余的@——Razor在foreach代码块内已经处于C#上下文,直接写Model.ListaNames即可 - 用
@:标记后续内容为输出文本,避免Razor把JS代码当成C#代码解析
必看的前提检查
不管用哪种方法,都要确保你的ViewModel类中ListaNames是public可访问的属性,比如:
public class YourPageViewModel { // 必须是public,Razor视图才能读取到 public List<NameEntity> ListaNames { get; set; } // 如果是字符串数组就是:public string[] ListaNames { get; set; } }
内容的提问来源于stack exchange,提问作者Cezar Mdlosci
相关产品推荐
相关产品推荐

