2012-12-07 41 views
0

Im卡住了另一個MVC/Knockout問題..MVC敲除字典綁定

這次它與一個序列化/字典集合有關。

我有以下視圖模型

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文件:

<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數據= @(Html.Raw(Json.Encode(型號)));

錯誤消息提到像「類型通用字典...不支持字典的序列化/反序列化,鍵必須是字符串或對象。」

回答

0

如異常說 - .NET不支持字典的序列化。您必須考慮3個選項:

  • 如果可能,用任何可序列化的數據結構替換dictionary
  • 編寫json序列化字典或找到現有的字典。
  • javaScriptSerializer將序列化字典。
+0

我仍然有同樣的問題..我連載我的字典和我返回一個JSON字符串,但它顯示了一個類型的錯誤:遺漏的類型錯誤:不能使用「在」運營商{ – user1484089

+0

所以搜索「長度」如果現在錯誤在客戶端網站上,則創建一個將顯示錯誤的小提琴。 –

+0

我不能讓jsfiddle工作..但我有這樣的東西:http://jsfiddle.net/valkesh/AH2pK/8/ ..從MVC檢索的數據是在變量數據,我想在模板中顯示鍵/值 – user1484089