2015-01-19 2 views
1

Не могли бы вы помочь мне найти то, что я делаю неправильно?Невозможно использовать данные моей модели в javascript

В моей модели есть поле [], которое называется AllKnownColors. Я пытаюсь использовать его в моем javascript-коде, например:

var clrs = JSON.parse('@Html.Raw(Model.AllKnownColors)'); 

Но это не работает. Отладчик показывает мне это:

var clrs = JSON.parse('System.String[]'); 

и следующее сообщение об ошибке: неперехваченным SyntaxError: Неожиданный маркер S

И я не могу понять, что это неправильно.

Спасибо.

+0

Что бы у вас было * понравилось * '@ Html.Raw (Model.AllKnownColors)' в результате? Как вы можете видеть, он превращается в '' System.String [] "' при преобразовании в строку (используя 'ToString()' внутренне как 'Html.Raw()' делает). – bzlm

+0

следует пометить это связанными с asp тегами, вопрос на самом деле не связан с javascript – charlietfl

+0

Не могли бы вы рассказать, что было бы правильным путем? Благодарю. –

ответ

0

Model.AllKnownColors является массив string. Html.Raw принимает один аргумент string. Поскольку Model.AllKnownColors не является string, структура C# вызывает метод объекта ToString. По умолчанию ToString возвращает имя типа объекта.

Если вы пытаетесь использовать чистую строку цветов, вы можете сделать что-то вроде этого, вместо:

var clrs = '@string.Join(", ", Model.AllKnownColors)'; 

Если вы на самом деле хотите превратить Model.AllKnownColors в массив JavaScript, вы можете сделать это:

var clrs = @Html.Raw(Json.Encode(Model.AllKnownColors)); 

Обратите внимание, что в обоих случаях JSON.parse не требуется.

+0

Последнее решение дает мне ошибку: Возвращает разметку, которая не кодируется html :( –

+0

Я забыл о запятой в конце второго примера. Однако это не должно приводить к некорректной «разметке». –

+0

Да, Я заметил точку с запятой, но она все еще дает мне эту ошибку ... –

1

Код

var clrs = JSON.parse('@Html.Raw(Model.AllKnownColors)'); 

похож на

var clrs = JSON.parse('@Html.Raw(Model.AllKnownColors.ToString())'); 

Вы должны преобразовать Model.AllKnownColors в JSON. Вы можете использовать Newtonsoft JSON для этой цели.

var clrs = JSON.parse('@Html.Raw(JsonConvert.SerializeObject(Model.AllKnownColors))'); 

Или вы можете написать собственный метод для преобразования. Newtonsoft JSON - это простой и удобный выбор. Ваши собственные методы могут быть более быстрыми.

+0

Спасибо вам за ваш ответ. По какой-то причине я получаю: «JsonConvert не существует в текущем контексте. –

+0

Вам нужно добавить ссылки на Newtonsoft.Json. Вы можете сделать с помощью пакета nuget: https://www.nuget.org/packages/Newtonsoft.Json /. – IAfanasov

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