2017-09-01 40 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