Проблемы с использованием viewdata механизма просмотра Spark для вызова функции javascript с параметрами, содержащими кавычки

Я разрабатываю веб-сайт, используя движок Spark View. Одно из искровых представлений имеет определенные данные представления, которые используются в javascript, определенном в том же самом искровом представлении, и выглядят (вкратце) следующим образом:

<viewdata model="ConversationViewModel"/>

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

Проблема здесь в том, что свойство RelationFullName может иметь значение, содержащее одинарные и / или двойные кавычки.

Есть ли способ избежать кавычек?


person Coilz    schedule 02.08.2012    source источник


Ответы (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()}");

Удачи!

person Don 01001100    schedule 09.08.2012