我是淘汰赛的新手,似乎无法让简单的映射工作。我在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>
由于
答案 0 :(得分:3)
来自$.getJSON
documentation
成功回调传递返回的数据,通常是a JavaScript 对象或数组,由JSON结构定义并解析 使用$ .parseJSON()方法。
所以你的data
变量持有一个已经解析过的对象,所以你需要使用ko.mapping.fromJS
方法:
$.getJSON('/Mapping/GetServerInfo', function(data) {
ko.mapping.fromJS(data, {}, vm);
});