2013-03-13 75 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