在剃刀输出单引号产生的JavaScript字符串(Output single quotes in R

2019-07-19 10:12发布

我用组装剃刀在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;;

Answer 1:

你可以通过输出这种方式关闭的HTML编码:

@Html.Raw(jsString)


Answer 2:

也许一个更好的解决办法是使用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"]如果你加入,为您的JS线,创造了friendArray,你会得到这样的: var friendArray = ["a","b","c"]; 这产生相同的阵列等你的。

请注意,分号(;)在结束var friendArray线是必要产生有效的JS声明。



文章来源: Output single quotes in Razor generated JavaScript String