27

我正在使用 Razor 在 JavaScript 中组装几行代码。我认为最简单的方法是先组装整个 JavaScript 块,然后输出整个内容。问题是,单引号被渲染为 & #39;。

是否可以更改最后一行以使其正确写入:

    var friendArray = new Array();
    @{
        int i = 0;
        string jsString="";
        foreach(var friend in friends)
        {
            jsString = jsString + "friendArray[";
            jsString = jsString + i.ToString();
            jsString = jsString + "]='";
            jsString = jsString + friend.displayname;
            jsString = jsString + "';";
            i++;
        }
        @jsString;
    }

以上生成:

  friendArray[0]=& #39;Hollister& #39;;friendArray[1]=& #39;Festus& #39;;
4

2 回答 2

46

您可以通过以下方式输出来关闭 HTML 的编码:

@Html.Raw(jsString)
于 2013-02-06T14:29:44.937 回答
0

也许更好的解决方案是使用 JSON 序列化程序来清理您的输出,这显然会带来可能的注入安全风险。

在您的特定情况下,您将改为:

var friendArray = @Html.Raw(JsonConvert.SerializeObject(friends.Select(f => f.displayname)));

或者如果这样对您来说更具可读性:

    @{
        var arr = JsonConvert.SerializeObject(friends.Select(f => f.displayname));
    }

    var friendArray = @Html.Raw(arr);

arr将采用 JSON 数组的形式,例如["a","b","c"],如果你将它加入到创建friendArray 的 JS 行,你会得到类似的东西:var friendArray = ["a","b","c"];它会创建与你的数组相同的数组。

请注意,行尾的分号 (;)var friendArray是生成有效 JS 语句所必需的。

于 2019-04-03T11:10:48.667 回答