Проблемы с использованием модели Razor при создании моей нокаутирующей ViewModel

У меня проблемы с использованием модели в вызове javascript при настройке моей нокаутирующей виртуальной машины.

@model List<AdminGui.Models.Domain>

<script src="http://ajax.aspnetcdn.com/ajax/knockout/knockout-2.2.1.js" type="text/javascript"></script>
<script type="text/javascript">
function ViewModel() {
    var self = this;

    self.domains = ko.observableArray(
        ko.utils.arrayMap(@Model, function(item) {
            return new Domain(item.guid, item.description, item.namespaces);
        }));
}

Я получаю синтаксическую ошибку в @Model при вызове ko.utils.arrayMap. Я подозреваю, что это может быть мой Razor-fu, которого не хватает... :)


person Emil Kantis    schedule 02.07.2013    source источник


Ответы (1)


Model — это ваша модель C#, которую нельзя использовать напрямую из JavaScript, потому что запись @Model просто вызывает ToString, а это не то, что вам нужно.

Что вам нужно, так это преобразовать вашу модель в JSON, вы можете сделать это с помощью метода Json.Encode

self.domains = ko.observableArray(
        ko.utils.arrayMap(@Html.Raw(Json.Encode(Model)), function(item) {
            return new Domain(item.guid, item.description, item.namespaces);
        }));

Примечание. Вам нужно обернуть его Html.Raw, чтобы отключить автоматическое кодирование HTML в Razor.

person nemesv    schedule 02.07.2013
comment
Я настоятельно рекомендую не использовать встроенный Javascript или использовать движок Razor для встроенного рендеринга JSON. Для лучшего, более удобного и тестируемого решения переместите модель представления в js-файл с тем же именем, что и у содержащейся в нем модели (один файл на модель), используйте связывание MVC4 для ссылки на сценарии на странице. Затем используйте ASP.NET WebApi для получения данных JSON с сервера. - person Anders; 02.07.2013