我想到了。我不得不转义双引号或单引号。
转义单引号:
vm.field1('@Html.Raw(Model.field1.Replace("'", "\\\'"))');
或转义双引号:
vm.field1("@Html.Raw(Model.field1.Replace("\"", "\\\""))")
更新
我发现我原来的解决方案存在安全问题。如果输入是A'B'C</SCRIPT>
,它将破坏页面上的 javascript。为了解决这个问题,我对除单引号和双引号之外的所有内容进行了 HTML 编码。
vm.field1('Html.Raw(Html.Encode(Model.field1).Replace("'", "\\\'").Replace(""", "\""))');
更新 2
我发现 AntiXss 库为此提供了一些工具,而且我发现这会更好。
public static class StringExtensions
{
public static string ToQuotedJsString(this string s)
{
return Micorosoft.Security.Application.Encoder.JavaScriptEncode(s, true);
}
}
然后在视图中:
vm.field1(@Html.Raw(Model.field1.ToQuotedJsString()));