You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何在JavaScript中获取CSHTML页面中的testModel模型列表数据

解决方案

你之前写的var listModel = document.getElementById("mainOfferDiv")只能获取到div对应的DOM对象,该对象本身没有存储你的lstModel数据,所以无法拿到目标集合。
lstModel是服务端渲染阶段的C#变量,不会直接暴露给客户端JS,需要你主动把它序列化为JSON格式传递到客户端,以下是两种常用的实现方式:

方式1:挂载为全局JS变量(最简单)

首先在你的CSHTML页面里,引入外部JS之前,添加如下代码,把C#集合序列化为JSON赋值给全局变量:

// 引入序列化命名空间,如果你用Newtonsoft.Json就替换成对应的命名空间
@using System.Text.Json
@model IEnumerable<testModel>
@{
    var lstModel = Model.ToList();
}
<!-- 把C#集合序列化为JSON,暴露为全局JS变量,注意一定要加Html.Raw避免特殊字符转义 -->
<script>
window.lstModel = @Html.Raw(JsonSerializer.Serialize(lstModel));
</script>
<!-- 注意必须在上面的script之后再引入你的外部JS文件 -->
<script src="你的外部JS文件路径"></script>

之后在外部JS文件里直接访问window.lstModel就能拿到完整的testModel数组,每一项的ID和name属性都可以直接读取。

方式2:存到DOM元素的data属性(适合不想污染全局变量的场景)

在CSHTML的目标div上添加自定义data属性存储序列化后的JSON:

<div id="mainOfferDiv" data-model-list="@Html.Raw(JsonSerializer.Serialize(lstModel))">
@for(int i = 0; i<lstModel.Count(); i++)
{
}
</div>

然后在外部JS里按如下方式解析获取:

const mainDiv = document.getElementById("mainOfferDiv");
const listModel = JSON.parse(mainDiv.dataset.modelList);
// 此时listModel就是完整的testModel数组

注意事项:

  • 必须加@Html.Raw,否则Razor会自动把JSON里的引号等特殊字符转义,导致JSON格式错误无法解析
  • 如果你的项目用的是Newtonsoft.Json,把JsonSerializer.Serialize替换成JsonConvert.SerializeObject即可
  • 序列化相关的C#代码必须写在CSHTML文件里,不能直接写到外部JS文件中,外部JS不会经过Razor引擎渲染,无法识别C#语法

内容的提问来源于stack exchange,提问作者Pran

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.09.27 18:06:07