使用来自服务器的默认数据初始化视图模型

问题描述:

如何在首次调用页面时在knockoutjs视图模型中填充数据?也就是说,视图首次呈现时。使用来自服务器的默认数据初始化视图模型

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

我尝试下面的代码,但它失败,出现以下错误:

A circular reference was detected while serializing an object of type.

这是我的代码:

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> 
+0

此主题有几个选项可能适用于您:https://groups.google.com/d/topic/knockoutjs/7MsY8HGVtrc/discussion –

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

+0

它是EF实体对象列表。 Html.DropDownList如何管理它?我想它只是在服务器上拉ID和名称,所以没有更多的序列化 –

+0

@Pinakin Shah,Html.DropDownList不关心循环引用。它仅使用对象层次结构的1级元素,而为了序列化对象图形,需要访问整个层次结构。这当然不适用于JSON或XML。 –

+0

同意。我只应该从服务器发送所需的名称和值对。 –