我想通了。我不得不逃避雙引號或單引號。
逃逸單引號:
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(""e;", "\""))');
更新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()));
在第一個 「更新」 改變 「"e;」 到 「"」 – PanKak