asp.net mvc - 由于 JSON 字符串中的 HTML 实体而导致 JavaScript 崩溃

asp.net mvc - JavaScript crashing due to HTML entities in JSON string

本文关键字:实体 HTML 崩溃 JavaScript mvc net 由于 字符串 JSON asp      更新时间:2023-09-26

我正在使用NewtonSoft.Json.JsonConvert.SerializeObject()将 ASP.NET 字典对象序列化为JSON字符串。然后,我通过 ViewBag 将此字符串传递给我的 MVC View。

当我在我的 MVC Razor by Razor 语法中尝试将 JSON 字符串从 ViewBag 加载到 JavaScript 变体中时,由于语法错误,我的 JavaScript 崩溃了。当我检查源代码时,我发现:

var hf = {"Test0":65,"Test1":23,"Test2":43,"Test3":6,"Test4":31,"Test5":78,"Test6":1,"Test7":53,"Test8":74,"Test9":54};

这是我在视图中加载 ViewBag 内容的逻辑:

@section RenderChart
{
<script type="text/javascript">
    google.load("visualization", "1", { packages: ["corechart"] });
    function drawChart() {
        var hf = @ViewBag.ChartJsonData;

由于某种原因,我的 JSON 字符串正在被 HTML 编码。我尝试在运行它后将其传递到 ViewBag 中Server.HtmlDecode()但这没有帮助。有谁知道如何解码这个字符串或将其传递给我的 MVC 视图中的 JavaScript,而无需将其转换为 HTML 实体?

如果每个字符串与@一起输出,则 Razor 会自动对每个字符串进行 HTML 编码。

如果你不想要HTML编码,你需要用Html.Raw包装你的字符串:

<script type="text/javascript">
    google.load("visualization", "1", { packages: ["corechart"] });
    function drawChart() {
        var hf = @Html.Raw(ViewBag.ChartJsonData)
    }
</script>