1

我是淘汰赛的新手,似乎根本无法获得一个简单的映射。我在 MVC4 C# 中。

我的视图看起来像这样:

@{
    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>
}

从控制器调用“Mapping/GetServerInfo”返回的示例 JSON 是:

{"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>

谢谢

4

1 回答 1

3

$.getJSON 文档

成功回调传递返回的数据,该数据通常是由 JSON 结构定义并使用 $.parseJSON() 方法解析的 JavaScript 对象或数组。

所以你的data变量持有一个已经解析的对象,所以你需要使用该ko.mapping.fromJS方法:

$.getJSON('/Mapping/GetServerInfo', function(data) {
   ko.mapping.fromJS(data, {}, vm);
});
于 2013-03-13T21:48:52.070 回答