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

如何在无Razor的MVC3中将C#字典读取为JavaScript对象?

解决旧MVC项目中Json序列化后变量undefined的问题

你在旧MVC项目里遇到的这个问题,核心是视图语法使用错误导致序列化后的JSON没有正确赋值给JavaScript变量,我来帮你梳理清楚解决办法:

问题根源

你尝试的var texts = <% Html.Raw(Json.Encode(Model.TextDict)); %>写法有个关键错误:
在Web Forms视图引擎(.aspx/.ascx)中,<% %>块仅执行服务器端代码,不会把代码的返回值输出到页面上。所以Html.Raw生成的JSON字符串根本没被写入到JavaScript变量里,自然texts就变成了undefined。

正确写法

针对Web Forms视图引擎(.aspx)

改用<%= %>输出表达式结果,它会把Html.Raw返回的JSON字符串直接赋值给texts:

var texts = <%= Html.Raw(Json.Encode(Model.TextDict)) %>;

针对低版本Razor视图

和新版本的写法逻辑一致,只是替换成MVC内置的Json.Encode(不需要额外引用Newtonsoft.Json包):

var texts = @Html.Raw(Json.Encode(Model.TextDict));

额外注意事项

  • 确保项目引用了System.Web.Helpers命名空间:如果是Web Forms视图,需要在web.config的<pages><namespaces>节点里添加<add namespace="System.Web.Helpers" />;Razor视图通常会自动引用,若未找到可在视图顶部手动添加@using System.Web.Helpers。
  • Json.Encode会自动处理HTML转义,搭配Html.Raw能保证生成的JSON不会被转义成实体字符,让JavaScript可以正确解析。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.25 08:03:20