首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >MVC基因敲除字典绑定

MVC基因敲除字典绑定
EN

Stack Overflow用户
提问于 2012-12-07 10:39:09
回答 1查看 830关注 0票数 0

我被另一个MVC/Knockout问题困住了。

这一次它与序列化/字典集合相关。

我有以下视图模型

代码语言:javascript
复制
public class ListViewModel
{
    public Dictionary<ItemViewModel, List<ItemViewModel>> Events { get; set; }

    public ListViewModel()
    {
        Events = new Dictionary<ItemViewModel, List<ItemViewModel>>();
    }
}

public class ItemViewModel
{
    public int Id { get; set; }
    public string Name { get; set; }
}

和cshtml文件:

代码语言:javascript
复制
<h2>Events</h2>
<div data-bind="template: { name: 'events-template', foreach: Events }"></div>

<script type="text/html" id="events-template">
    <ul>
        <li>
            <div><span data-bind='text: Events().length'/></div>
            <ul data-bind="foreach: Events">
                <li><span data-bind="text: $data"> </span></li>
            </ul>
        </li>
    </ul>     
</script>

<script type="text/javascript">

    var ListViewModel = function(model) {
        var self = this;

        self.Events = ko.observableArray(ko.utils.arrayMap(model.Events, function(itemViewModel) {
            var item = new ItemViewModel(itemViewModel);
            return item;
        }));
    };

    var ItemViewModel = function(itemViewModel) {
        var self = this;
        self.Name = ko.observable(itemViewModel.name);
        self.Id = ko.observable(itemViewModel.Id);
    };

    $(function() {
        var data = @(Html.Raw(Json.Encode(Model)));        
        ko.applyBindings(new ListViewModel(data));
    });

</script>

它似乎卡在var data =@(Html.Raw(Json.Encode(Model))上);

错误消息提到了类似“.不支持字典的序列化/反序列化,键必须是字符串或对象”之类的内容。

EN

回答 1

Stack Overflow用户

发布于 2012-12-07 10:48:24

正如例外说的- .NET不支持字典的序列化。你必须考虑三个选择:

  • 如果可能,用任何可序列化的数据结构替换dictionary
  • 编写json可串行化字典或找到现有字典。
  • 编写将序列化字典的javaScriptSerializer
票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/13761421

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档