2012-04-04 3 views
5

Я использую ASP.NET, и у меня есть строка HTML в базе данных.Хранить Html.Raw() в строке в Javascript, ASP.NET MVC 3

Я хочу получить этот html в переменной на клиенте.

Если я это сделать:

var x = '@Html.Raw(myModel.FishValue)' 

он отлично работает, потому что это по существу делает

var x = '<p>hello!</p>'; 

однако, если есть кавычки в HTML он разбивает страницу.

Моя первоначальная догадка бы .Привернуть необработанную строку, чтобы добавить побеги в кавычки, однако как .ToString() и .ToHtmlString() (как Html.Raw возвращает IHtmlString) не производит ту же разметку, как простой Html.Raw().

Так что я в недоумении, что лучше всего делать.

ответ

9

Как насчет замены перед вызовом метода Html.Raw?

var x = '@Html.Raw(myModel.FishValue.Replace("'","\\'"))' 

UPDATE:

Там могут быть и другие побег символы в строке, идущие от модели. По этой причине я бы рекомендовал сначала заменить косые черты. Конечно, все зависит от того, что может произойти с сервера в вашей модели.

var x = '@Html.Raw(myModel.FishValue.Replace("\\","\\\\'").Replace("'","\\'"))' 

Образец фрагмент, представляющий поведение в JavaScript:

//Let's say my Model Content is > I'd Say \ is a escape character. You can't "Escape" 
 
    // YOu would have to replace ' --> \' and \ --> \\ 
 
    var stringFromServer = 'I\'d Say \\ is a escape character. You can\'t "Escape"' 
 
    alert(stringFromServer)

1

Попробуйте это:

var x = '@(System.Web.HttpUtility.HtmlEncode(myModel.FishValue))'; 

Если вам необходимо декодировать HTML на клиенте боковой использование

unescape(x) 

Я думаю, что JQuery (не уверен, что вы используете его или нет) обрабатывает закодированные строки HTML, поэтому вам может не понадобиться unescape().

1

Попробуйте анти-XSS библиотеку от Microsoft (который будет включен я считаю, по умолчанию в asp.net 4.5):

 
AntiXss.JavascriptEncode(yourContent) 

Anti-Xss доступна 4,1 бета. Если вы хотите использовать его в своей заявке, которую я настоятельно рекомендую, ознакомьтесь с: http://weblogs.asp.net/jgalloway/archive/2011/04/28/using-antixss-4-1-beta-as-the-default-encoder-in-asp-net.aspx

Смежные вопросы