【问题标题】:Using the mapping plugin of Knockout in an Asp.Net MVC view在 Asp.Net MVC 视图中使用 Knockout 的映射插件
【发布时间】:2013-05-29 20:50:41
【问题描述】:

我有这段代码,它运行良好:

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

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

请注意,此脚本直接在我的视图中(例如 MyPage.cshtml)

我只是想知道为什么我必须使用函数 fromJS 而不是 fromJSON

如果我使用 fromJSON,没有错误,但似乎我的视图模型没有正确创建。

如果可能的话,如果有一个示例,我可以在相同的上下文中使用 fromJSON,将不胜感激;我直接从视图中获取模型而不是从 ajax 查询中获取它的情况。

【问题讨论】:

  • 为什么需要使用fromJS是个问题?
  • 这不是问题。我只是想了解为什么 fromJSON 在这种情况下不起作用,以及如果我想使用 fromJSON 必须提供什么。

标签: asp.net-mvc-4 knockout-2.0 knockout-mapping-plugin


【解决方案1】:

ko.mapping.fromJSON 接受一个 JSON string 然后解析它并使用解析的 JavaScript 对象在内部调用 ko.mapping.fromJS。但是,如果您使用不是字符串的内容调用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 字符串(并且不反序列化它 成一个 JavaScript 对象),然后你可以使用该函数 ko.mapping.fromJSON 改为创建和更新您的视图模型。到 取消映射,你可以使用ko.mapping.toJSON

除了它们使用 JSON 字符串而不是 JS objects 这些函数与它们的 *JS 完全一样 同行。

【讨论】:

  • 非常感谢。这正是我想知道的。
猜你喜欢
  • 2013-09-27
  • 2012-12-18
  • 2014-11-13
  • 2014-03-04
  • 2015-01-17
  • 2016-08-28
  • 2012-02-08
  • 2012-11-05
  • 2012-01-30
相关资源
最近更新 更多