我正在使用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;;
答案 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语句是必需的。