【问题标题】:Initializing viewmodel with default data from server使用来自服务器的默认数据初始化视图模型
【发布时间】:2011-07-14 13:11:53
【问题描述】:

我们如何在第一次调用页面时在 knockoutjs 视图模型中填充数据?也就是第一次渲染 View 的时候。

我的服务器视图模型类包含一个对象列表。我希望用这个值初始化 knockoutjs 视图模型属性。

我尝试了以下代码,但失败并出现以下错误:

序列化类型对象时检测到循环引用。

这是我的代码:

var mylist = @Html.Raw(Json.Encode(Model.list));

 var viewModel = {
     list: ko.observableArray(myList),
 };

标准下拉列表适用于相同的属性。好像是序列化问题?

<div class="editor-field">
@Html.DropDownListFor(model => model.list, new SelectList(Model.list, "id", "name"), "-- select --")
</div>

【问题讨论】:

标签: asp.net-mvc-3 knockout.js


【解决方案1】:

您应该使用没有循环引用的视图模型,否则您将无法对其进行 JSON 序列化 (Json.Encode(Model.list))。我想这个Model.list 属性是一些对象的集合,它们之间有循环引用。如果您希望能够对模型进行 JSON 序列化,则必须从视图模型中删除导致这些循环引用的属性。

【讨论】:

  • 是EF Entity对象列表。 Html.DropDownList 如何管理它?我猜它只是在服务器上提取 ID 和名称,所以没有更多的序列化
  • @Pinakin Shah,Html.DropDownList 不关心循环引用。它仅使用对象层次结构的 1 级的元素,而为了序列化对象图,需要访问整个层次结构。这对于 JSON 或 XML 来说当然是不可能的。
  • 同意。我应该只从服务器发送所需的名称和值对。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2012-07-15
  • 2021-11-08
  • 2013-11-26
  • 2012-03-02
  • 2013-07-17
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多