2013-03-13 53 views
1

我是新来淘汰赛,似乎无法得到一个简单的映射工作。我在一个MVC4 C#中。Knockout映射尝试不映射与JSON响应

我的视图看起来像这样:

@{ 
    Layout = "~/Views/Shared/_Layout.cshtml"; 
    ViewBag.Title = "Index"; 
} 

<h2>Simple Mapping Example</h2> 

The time on the server is: <span data-bind="text: ServerTime"></span> 
and <span data-bind="text: NumberOfUsersConnected"></span> user(s) are connected. 

@section Scripts 
{ 
    <script type="text/javascript"> 

     function ViewModel() { 
      var self = this; 

      self.ServerTime = ko.observable(); 
      self.NumberOfUsersConnected = ko.observable(); 
     } 

     var vm = new ViewModel(); 
     ko.applyBindings(vm); 

     $.getJSON('/Mapping/GetServerInfo', function(data) { 
      ko.mapping.fromJSON(data, {}, vm); 
     }); 

    </script> 
} 

例JSON,其从控制器呼叫“映射/ GetServerInfo”返回是:

{"ServerTime":"2013-03-13T14:24:10.5675104-07:00","NumberOfUsersConnected":5} 

对于数据结合我试图文本和值,都不会导致任何数据被绑定和显示。

我是否错过了一些非常明显的东西?

根据评论中的问题是这是我的布局是什么。

<script type="text/javascript" src="~/Scripts/knockout-2.2.1.js"></script> 
<script type="text/javascript" src="~/Scripts/knockout.mapping-latest.js"></script> 

由于

+1

你有没有在你的布局引用KO和KO.mapping? @RenderSection(“脚本”)是在@RenderBody和脚本包含之后出现的吗? – nemesv 2013-03-13 21:34:07

+0

更新的原始问题。谢谢 – 2013-03-13 21:35:48

回答

3

$.getJSONdocumentation

成功回调被传递返回的数据,其通常是 的JavaScript 物体或阵列由JSON结构限定并解析 使用$ .parseJSON()方法。

所以你的data变量拿着已经被解析的对象,所以你需要使用ko.mapping.fromJS方法:

$.getJSON('/Mapping/GetServerInfo', function(data) { 
    ko.mapping.fromJS(data, {}, vm); 
}); 
+0

是的,我明白了这一点。谢谢回复。 – 2013-03-14 18:37:54