Необходимо экранировать кавычки переменной в MVC View для передачи в качестве параметра в JavaScript - PullRequest
4 голосов
/ 22 декабря 2009

У меня есть представление MVC, в котором мне нужно передать строковую переменную в JavaScript, но эта строковая переменная содержит одинарные кавычки ('). Я пытаюсь сделать что-то вроде этого

<a onclick="JavaScript:AddressHandler.ProcessAddress('<%= homeAddress %>');" 
                            class="button-link">change</a>

homeAddress имеет одинарные кавычки, которые мне нужно как-то обойти, чтобы я мог передать их полное значение в JavaScript.

Ответы [ 5 ]

12 голосов
/ 21 февраля 2011

Вы можете использовать помощник Ajax: Ajax.JavaScriptStringEncode(string strToEncode)

4 голосов
/ 22 декабря 2009

Чтобы строка не была строковым литералом Javascript, вы заменяете обратную косую черту двойной обратной косой чертой, а разделитель строк - обратной косой чертой и разделителем:

<a onclick="AddressHandler.ProcessAddress('<%= homeAddress.Replace(@"\", @"\\").Replace("'", @"\'") %>');" class="button-link">change</a>

Примечание: протокол javascript: используется, когда вы помещаете скрипт в URL, а не как обработчик событий.

Edit:
Если сценарий также содержит символы, для которых требуется кодировка HTML, это следует сделать после экранирования строки Javascript:

<a onclick="<%= Html.Encode("AddressHandler.ProcessAddress('" + homeAddress.Replace(@"\", @"\\").Replace("'", @"\'") +"');") %>" class="button-link">change</a>

Итак, если вы не знаете, что содержит строка, для безопасности вам необходимо сначала экранировать строковый литерал, а затем кодировать код HTML, чтобы его можно было вставить в атрибут тега HTML.

0 голосов
/ 22 декабря 2009

Вы хотите закодировать homeAddress в качестве URL. MVC имеет встроенный помощник для этого: UrlHelper.Encode (строка url) - он должен заменить одну кавычку на %27

0 голосов
/ 22 декабря 2009

Вы можете написать метод, который экранирует все одинарные кавычки (и другие символы, если необходимо) с обратной косой чертой, чтобы он не был неправильно понят JavaScript.

0 голосов
/ 22 декабря 2009

У меня нет времени, чтобы проверить это, но посмотрите на HtmlHelper.Encode (string s). Он может справиться с побегом для вас.

...