2013-05-29 1 views
1

У меня есть этот код и он работает отлично:Используя отображение плагин нокатирующим в Asp.Net MVC зрения

<script> 
    $(function() { 
     var modelAsString = @Html.Raw(Newtonsoft.Json.JsonConvert.SerializeObject(Model)); 

     myProject.initialize(ko.mapping.fromJS(modelAsString)); 
    }); 
</script> 

Обратите внимание, что этот скрипт непосредственно на мой взгляд (например MyPage.cshtml)

Мне просто интересно, почему я должен использовать функцию отJS вместо отJSON.

Если я использую отJSON, нет ошибки, но похоже, что моя модель просмотра создана неправильно.

И если это возможно, было бы весьма полезно иметь пример, где я могу использовать JSON с одним и тем же контекстом; случай, когда я непосредственно получаю модель из представления вместо того, чтобы получать ее из запроса ajax.

+0

Почему это проблема, которую вам нужно использовать с помощью JS? – nemesv

+0

Это не проблема. Я просто хочу понять, почему от JSON не работает в этом случае и что я должен предоставить, если я хочу использовать JSON. – Samuel

ответ

2

ko.mapping.fromJSON принимает JSON строки затем анализирует его и вызывает ko.mapping.fromJS внутри с разобранным объектом JavaScript. Однако, если вы вызываете ko.mapping.fromJSON с чем-то, что не является строкой, оно возвращает null, поэтому сопоставление не произойдет.

Так что в вашем случае вам нужно изменить modelAsString держать строку JavaScript с обертыванием результата Html.Raw вызова с апострофом, то вы можете использовать ko.mapping.fromJSON на нем:

var modelAsString = '@(Html.Raw(Newtonsoft.Json.JsonConvert.SerializeObject(Model)))'; 

myProject.initialize(ko.mapping.fromJSON(modelAsString)); 

образует также отображение плагина documentation (курсив мной):

Работа с JSON строки

Если вызов Ajax возвращает JSON string (и не десериализует его в объект JavaScript), то вы можете использовать функцию ko.mapping.fromJSON, чтобы вместо этого создать и обновить вашу модель представления. К unmap, вы можете использовать ko.mapping.toJSON.

Помимо того, что они работают с JSON строки вместо JS объектов эти функции полностью идентичны своим * JS коллегами.

+0

спасибо. Это именно то, что я хочу знать. – Samuel