逃避javascript中的dotnet资源

时间:2017-03-08 15:44:54

标签: javascript c# asp.net-mvc

我需要在java脚本中读取dot ner reesources字符串,如下所述。

var resources = @Html.ResourceStrings("Home_General_", Resources.ResourceManager);

以上行将呈现以资源键开头的所有资源(来自Dot net资源文件)" Home_General _"

资源中的一些值类似于"嗨" XYZ"你在那儿"即该字符串包含引号字符。

如果字符串有引号,则上述调用失败。

避免此问题的一种方法是将特殊字符转义为"Hi \"XYZ\" are you there"

我们可以避免这种情况的任何其他方式,因为我不想用大量的转义(\)字符来污染我的资源字符串。

3 个答案:

答案 0 :(得分:3)

当您将其渲染为Javascript字符串文字时,您需要Javascript-escape任何字符串。

您还必须从字符串资源中删除外部引号;应该是文本,而不是半有效的Javascript表达。

答案 1 :(得分:1)

使用这样的代码来检索单个资源字符串:

var resourceXYZ = '@Html.Raw(HttpUtility.JavaScriptStringEncode(Resources.ResourceManager.GetString("Home_General_XYZ")))';

我们执行以下操作:

  1. 我们通过Resources.ResourceManager.GetString()获取资源字符串。
  2. 我们将结果传递给HttpUtility.JavaScriptStringEncode以转义JavaScript中的任何特殊字符。
  3. 我们将结果传递给Html.Raw(),以防止Razor对此字符串应用HTML编码。
  4. 然后,我们将单引号四元组中的文本输出到页面中。
  5. 函数Html.ResourceStrings不是MVC的标准函数。你所在地的某人必须写好。如果您向我们展示此代码,我们可以告诉您如何重写它以返回有效的JavaScript文字。

答案 2 :(得分:0)

您可以使用HttpUtility.JavaScriptStringEncode包裹@Html.ResourcesString(...)来处理所有转义问题。

var resources = @HttpUtility.JavaScriptStringEncode(Html.ResourceStrings("Home_General_", Resources.ResourceManager));