2

我正在使用 Spark 视图引擎开发一个网站。其中一个 spark 视图定义了 viewdata,该视图数据在同一个 spark 视图中定义的 javascript 中使用,看起来(简而言之)如下所示:

<viewdata model="ConversationViewModel"/>

<content name="Conversation">
  ...
  <script type="text/javascript">
    $(function () {
      conversation.init("$!{Model.RelationFullName}");
    });
  </script>
</content>

这里的问题是 RelationFullName 属性可以有一个包含单引号和/或双引号的值。

有没有办法逃避引号?

4

1 回答 1

1

你可以创建一个扩展方法JavaScriptEscape作为this string它的第一个参数,然后在你的 _global.spark 中添加一个使用标签。该方法将替换任何特殊字符并返回结果。只需确保先替换反斜杠,否则'会变成\\'而不是\'.

namespace Whatever.Your.Namespace.Is
{
    public static class MyStringExtensions
    {
        public static String JavaScriptEscape(this String p_string)
        {
            p_string = p_string ?? String.Empty;
            p_string = p_string.replace("\\", "\\\\");
            /* Do the rest of the replacements, include single and double quotes. */
            return p_string;
        }
    }
}

在 _global.spark 中:

<use namespace="Whatever.Your.Namespace.Is" />

您的 JavaScript 行将是:

conversation.init("$!{Model.RelationFullName.JavaScriptEscape()}");

祝你好运!

于 2012-08-09T19:56:33.583 回答