Asp.net mvc 3 使用服务器中的默认数据初始化viewmodel

Asp.net mvc 3 使用服务器中的默认数据初始化viewmodel,asp.net-mvc-3,knockout.js,Asp.net Mvc 3,Knockout.js,如何在第一次调用页面时填充knockoutjs视图模型中的数据?即,第一次渲染视图时 我的服务器视图模型类包含一个对象列表。我想用这个值初始化knockoutjs视图模型属性 我尝试了以下代码,但失败,出现以下错误: 序列化类型的对象时检测到循环引用 这是我的代码: var mylist = @Html.Raw(Json.Encode(Model.list)); var viewModel = { list: ko.observableArray(myList), }; 标准下

如何在第一次调用页面时填充knockoutjs视图模型中的数据?即,第一次渲染视图时

我的服务器视图模型类包含一个对象列表。我想用这个值初始化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>

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

这是EF实体对象列表。Html.DropDownList如何管理它?我猜它只是在服务器上提取Id和名称,所以不需要更多的信息serialize@PinakinDropDownList不关心循环引用。它只使用对象层次结构1级的元素,而为了序列化对象图,需要访问整个层次结构。当然,这在JSON或XML.Agree中是不可能的。我应该只从服务器发送所需的名称和值对。此线程有几个选项可能适合您: