2017-09-01 66 views
0

我試圖綁定選擇並表的AJAX調用在ASP.NET與後端的EntityFramework未來對象的結果。
下面是腳本:綁定knockoutjs/ASP.NET中的映射與EF對象

<script type="text/javascript"> 
    function QuizListViewModel() { 
     var self = this; 
     self.quizList = ko.observableArray([]); 
    } 

    var qlvm = new QuizListViewModel(); 
    ko.applyBindings(qlvm); 

    function FetchQuizzes() { 

     $.getJSON(
      "/DesktopModules/personify/QuizAdminDos/API/QuizAdmin/QuizList", 
      function (result) { 
       var mapping = { 
        'observe': ["IdQuiz", "Name"] 
       } 
       parsedJsonQuizzes = jQuery.parseJSON(result); 
       console.log(parsedJsonQuizzes); 
       ko.mapping.fromJS(parsedJsonQuizzes, mapping, qlvm.quizList); 
      });  
    } 

    $(document).ready(function() { 
     FetchQuizzes(); 
    }); 

</script> 

這裏查看:

<select data-bind="options: quizList, 
        optionsText: function(quiz) { return quiz.Name() + '(Id: ' + quiz.IdQuiz() + ')'}, 
        optionsCaption: 'Select a quiz...'"></select> 

我已經通過我得到的對象從我的JSON回調調試驗證。我也已經驗證了「quizList」觀察到有ko.mapping.fromJS調用後的值。但是,我的選擇中沒有顯示任何內容。我甚至沒有得到「optionsCaption」值。

我可以在直接結合EF對象(從DB產生)?

enter image description here 並充分披露,這是怎麼了返回從我的AJAX調用的對象:

using (var db = new LinuxDatabase()) 
    { 
     List<Quiz> qzs = db.Quizs.ToList(); 
     db.ContextOptions.LazyLoadingEnabled = false; 

     var json = JsonConvert.SerializeObject(qzs); 
     return Request.CreateResponse(HttpStatusCode.OK, json); 
    } 

感謝這裏是從parsedJsonQuizzes的輸出的console.log回來幫幫我!

回答

0

我認爲你需要將你的電話轉到applyBindings到你的$(documnent).ready函數中,這樣才能確保在你嘗試綁定之前已經加載了DOM。

+0

根據我所見過的所有例子,你不需要這樣做: https://docs.microsoft.com/en-us/aspnet/core/client-side/knockout 雖然,我做了嘗試你的解決方案,不幸的是它沒有工作。 – Joe