2013-09-05 4 views
3

Я использую Нокаут с MVC и стандартным методом я видел, чтобы получить модель представления для нокаута, как это:экранировать специальные символы в формате JSON закодированной строке

var model = '@Html.Raw(Json.Encode(Model))'; 
var viewModel = ko.mapping.fromJSON(model); 

Но если моя модель имеет строковые свойства со специальными символами в них, например '\ r \ n' Я получаю сообщение об ошибке синтаксического анализа JSON «неожиданный токен».

Поэтому я считаю, что мне нужно избежать этих символов, чтобы они были похожими на «\\ r \\ n». Как это сделать?

Я знаю, что могу просто сделать это для этого конкретного случая:

var model = '@Html.Raw(Json.Encode(Model).Replace(@"\", @"\\"))'; 

, но могут быть и другие ... Вкладки, одиночные кавычки.

Ниже приведен пример фактической оказанной модели в браузере:

var model = '{"Id":4465,"TextContents":["EYE FILLET STEAK\r\nLINE 2 IS HERE"]}'; 
+1

Это похоже на действительный JSON для меня. Почему он заключен в кавычки? –

+0

Это должно быть насколько я знаю из-за того, что MVC хочет делать что-то. Его синтаксическая ошибка в представлении «Бритва», если я удалю цитаты. – user380689

+0

Вставить ошибку. Вам не нужны кавычки. –

ответ

7

Ваш model является строка, а не JSON. Он оценивает escape-символы перед анализом JSON (если вообще?) Зачем вам нужны кавычки? Просто удалите их.

var model = @Html.Raw(Json.Encode(Model)); 
+0

Hmm .. это работает. Visual Studio сообщает мне свою синтаксическую ошибку, но она компилируется и отлично работает в браузере. Думаю, глупо VS2012. Благодарю. – user380689

+0

Попробуйте эту 'var model = @ (Html.Raw (Json.Encode (Model)));', посмотрите, исправляет ли это предупреждение. К сожалению, у меня нет VS на руках, чтобы попробовать. –

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