6

我堅持的東西很基本,我相信,因此我需要一些專業知識來幫助我完成這項任務。Knockout Js字典顯示MVC

我有一個字典,它需要一個整數和字符串作爲值來存儲結果列表(我將在下面顯示)。我的視圖模型和控制器有這樣的代碼,該數據作爲JSON字符串張貼到淘汰賽:

[代碼視圖模型]

public class ResultModel 
{ 
    public Dictionary<int, string> dictResult { get; set; } 
    public string dictResultJson { get; set; } 

    public ResultModel() 
    { 
     dictResult = new Dictionary<int, string>(); 
    } 
} 

[代碼爲CSHTML文件]

<h2>Results</h2> 
<table> 
    <tbody data-bind="template: { name: 'tblResult', foreach: dictResultJson() }"></tbody> 
</table> 

<script id="tblResult" type="text/html"> 
    <tr> 
     <td data-bind="value: key"></td> 
     <td data-bind="value: value"></td> 
    </tr> 
</script> 

<script type="text/javascript"> 
    var ResultModel = function(m) { 
     var self = this; 
     self.dictResultJson = ko.observableArray(mapDictionaryToArray(m.DictJson)); 
    }; 

    function mapDictionaryToArray(dictionary) { 
     var result = []; 
     for (var key in dictionary) { 
      if (dictionary.hasOwnProperty(key)) { 
       result.push({ key: key, value: dictionary[key] }); 
      } 
     } 

     return result; 
    } 

    var data = @(Html.Raw(Json.Encode(Model))); 
    var dataFromServer = ko.utils.parseJson(data.dictResultJson); 
    console.log(dataFromServer); 

    ko.applyBindings(new ResultModel(dataFromServer)); 
    console.log("apply binding"); 
</script> 

在我的cshtml文件中,我將解析MVC控制器返回的對象並將其轉換爲數組。現在問題是它不顯示任何數據,但變量dataFromServer包含正確的數據。它有這樣的數據:

對象{1:「凱特」,3:「亞歷克斯」,4:「簡」}

現在,我怎麼循環這個JSON結果,以便在顯示它以表的格式,例如

1凱特

3亞歷

4簡

在此先感謝

傑斯蒙德

+1

在我看來,它是貫徹落實「mapDictionaryToArray」在服務器端的更好的主意。編譯代碼的工作速度要快得多,對吧? – RredCat

回答

2

如果你想顯示的文字,你需要使用的text binding代替value

<tr> 
    <td data-bind="text: key"></td> 
    <td data-bind="text: value"></td> 
</tr> 

在表中的值,並具有一個其他問題,您的碼。當您撥打new ResultModel(dataFromServer)時,dataFromServer已包含正確格式的數據。所以,你不需要m.DictJsonResultModel功能:

var ResultModel = function(m) { 
     var self = this; 
     self.dictResultJson = ko.observableArray(mapDictionaryToArray(m)); 
}; 
+0

非常感謝,非常有意義! – user1889181