2016-08-08 4 views
0

В контроллере ASP MVC, я создал переменную ViewBag со списком элементов, которые будут загружен на моей странице:Специальные символы в формате JSON ломают JS

public ActionResult Items() 
    { 
     ViewBag.itemList = Repo.GetItems(); // Returns list of Items 
     return View("Items"); 
    } 

На стороне страницы, я разбор этих данных :

@{ 
Newtonsoft.Json.JsonSerializerSettings jsonSettings = new Newtonsoft.Json.JsonSerializerSettings { ContractResolver = new Newtonsoft.Json.Serialization.CamelCasePropertyNamesContractResolver() }; 
var jsonData = @Html.Raw(Newtonsoft.Json.JsonConvert.SerializeObject(Model, Newtonsoft.Json.Formatting.Indented, jsonSettings)); 
var serial = new System.Web.Script.Serialization.JavaScriptSerializer(); 
var items = serial.Serialize(ViewBag.itemList); 
} 

в моей функции Нокаут нагрузки, я анализирую список и удалить символы новой строки, которые нарушают функцию JSON.parse().

self.load = function() { 
var itemsEscaped = '@Html.Raw(items.Replace("'", "\\'"))'.replace("\n", "\\n"); 
var someItems = JSON.parse(itemsEscaped); 
ko.mapping.fromJS(someItems, self.itemMapping, self.someItems); 
} 

Однако другие специальные символы иногда нарушают функцию JSON.parse(). Есть ли способ отфильтровать их либо на контроллере на стороне JS?

+0

проверить http://stackoverflow.com/a/7836439/850825 – jessh

+0

Я видел это сообщение. Я попробовал решение там, но имел проблемы. Не лучше ли было бы сделать это на стороне контроллера? – PaulP

+0

Просьба привести пример данных, которые разбивают 'JSON.parse()'. –

ответ

0

Вместо того, чтобы писать свой JSON непосредственно на HTML-странице страницы, вы можете передать его как ответ на запрос JavaScript на сервер.

Если вы хотите написать его непосредственно в своем cshtml, посмотрите на это сообщение: How do I write unencoded Json to my View using Razor?, в котором показано, как печатать незашифрованные JSON на странице с некоторыми специальными символами, закодированными, чтобы не вызывать проблем с дальнейший синтаксический анализ.

+0

Если я передаю JSON в качестве ответа (который я делаю прямо сейчас в других частях проектов), я все еще сталкиваюсь с проблемой разбора JSON с недопустимыми символами. – PaulP

+0

И вы пробовали использовать '@ Html.Raw (Json.Encode (/ * ... * /))', как указано в ответе на вопрос, на который я разместил ссылку? –

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

  • Нет связанных вопросов^_^