2017-09-01 4 views
0

ASP.NETでEntityFrameworkバックエンドからのオブジェクトを使用してAJAX呼び出しの結果にselectおよびtableをバインドしようとしています。EFオブジェクトを使用したASP.NETでのknockoutjs/mappingのバインド

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

私は戻って私のJSON呼び出しからオブジェクトを取得しています、デバッグを通じて確認しました:ここ

<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> 

が表示される:
はここでスクリプトです。私はまた、 'quizList'観測値にko.mapping.fromJS呼び出しの後に値があることを確認しました。しかし、何も私の選択に表示されていません。私は "optionsCaption"値を取得しません。

私はEFオブジェクト(DBから生成)に直接バインドできますか?ここparsedJsonQuizzesのはconsole.log出力から戻って来ているものです。

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); 
    } 

感謝助けて!

答えて

0

applyBindingsへの呼び出しを$(documnent).ready関数に移動して、バインドしようとする前にDOMが確実に読み込まれるようにする必要があると思います。

+0

私が見たすべての例に基づいて、これを行う必要はありません。 https://docs.microsoft.com/en-us/aspnet/core/client-side/knockout あなたの解決策を試してください、残念ながら、それはうまくいかなかったのです。 – Joe

関連する問題