在Razor中生成单引号生成JavaScript String

时间:2013-02-06 14:26:34

标签: asp.net-mvc razor

我正在使用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;;

2 个答案:

答案 0 :(得分:38)

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

@Html.Raw(jsString)

答案 1 :(得分: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行,您将得到类似以下内容的信息:{{1} },它会创建与您相同的数组。

请注意,var friendArray = ["a","b","c"];行结尾的分号(;)对于产生有效的JS语句是必需的。